基于FastAPI的顺序思维MCP服务器
基于FastAPI的MCP(模型上下文协议)服务器,通过结构化思维过程为动态和反思性问题解决提供顺序思维工具,以及用于网络抓取和测试的强大无浏览器Playwright自动化工具。
特性
- 顺序思维工具:将复杂问题分解为可管理的步骤
- 动态思维修正:随着理解的加深,修改和完善想法
- 分支推理:转向其他推理路径
- 适应性规划:动态调整想法总数
- 假设生成与验证:生成并验证解决方案假设
- 剧作家浏览器自动化:无浏览器网页抓取、屏幕截图、表单填充和JavaScript执行
- 回声工具:用于测试和调试MCP连接的简单回声工具
- HTTP传输:可使用FastAPI通过流式HTTP访问
- n8n准备就绪:所有Playwright工具都是为与n8n工作流无缝集成而设计的
工具
工具:echo
一个简单的回显工具,返回您发送给它的消息。可用于测试MCP服务器连接和基本功能。
输入:
message(string):要回显的消息
退货:
echo(string):原始消息length(整数):消息的长度status(string):操作状态(始终为“成功”)
例子:
{
"message": "Hello, World!"
}答复:
{
"echo": "Hello, World!",
"length": 13,
"status": "success"
}剧作家自动化工具
所有Playwright工具都可以运行 无浏览器无头模式,使其非常适合服务器环境和n8n工作流。屏幕截图以base64编码字符串的形式返回,便于集成。
工具:剧作家_编剧
导航到URL并捕获屏幕截图。
输入:
url(字符串,必填):要导航到的URL(必须包含http://或https://)wait_for_selector(string,可选):截图前等待的CSS选择器wait_time(整数,可选):页面加载后的等待时间(毫秒)(默认值:1000)full_page(boolean,可选):是否捕获完整的可滚动页面(默认值:false)
退货:
status(string):“成功”或“错误”url(string):导航到的URLtitle(string):页面标题screenshot(string):Base64编码的截图图像screenshot_size(整数):屏幕截图的大小(以字节为单位)full_page(boolean):是否捕获了整页
例子:
{
"url": "https://example.com",
"full_page": true
}工具:剧作家_scrape_text
从网页中提取文本内容。
输入:
url(字符串,必填):要导航到的URLselector(string,可选):CSS选择器,用于提取特定内容(如果为None,则获取所有正文)wait_time(整数,可选):页面加载后的等待时间(毫秒)(默认值:1000)
退货:
status(string):“成功”、“警告”或“错误”url(string):导航到的URLtitle(string):页面标题selector(string):使用的选择器text(string):提取的文本内容text_length(整数):提取文本的长度
工具:剧作家_get_html
从网页中提取HTML内容。
输入:
url(字符串,必填):要导航到的URLselector(string,可选):CSS选择器,用于提取特定的HTML(如果为None,则获取所有页面HTML)wait_time(整数,可选):页面加载后的等待时间(毫秒)(默认值:1000)
退货:
status(string):“成功”、“警告”或“错误”url(string):导航到的URLtitle(string):页面标题selector(string):使用的选择器html(string):提取的HTML内容html_length(整数):提取的HTML长度
工具:playwritt_click
导航到URL并单击元素。
输入:
url(字符串,必填):要导航到的URLselector(string,必填):要单击的元素的CSS选择器wait_after_click(整数,可选):单击后等待的时间(毫秒)(默认值:1000)screenshot(布尔值,可选):点击后是否截图(默认值:true)wait_for_navigation(布尔值,可选):点击后是否等待导航(默认值:false)
退货:
status(string):“成功”或“错误”original_url(string):导航到的原始URLcurrent_url(string):点击后的当前URLtitle(string):点击后的页面标题selector(string):单击的选择器clicked(boolean):点击是否成功screenshot(字符串,可选):如果需要,可以使用Base64编码的屏幕截图screenshot_size(整数,可选):屏幕截图的大小(以字节为单位)
工具:剧作家法
填写网页上的表单字段。
输入:
url(字符串,必填):要导航到的URLfields(数组,必填):具有“选择器”和“值”键的对象列表
- 例子: [{"selector": "#email", "value": "test@example.com"}, {"selector": "#password", "value": "secret"}]
submit_selector(string,可选):提交按钮的CSS选择器(如果为None,则不提交)wait_after_submit(整数,可选):提交后等待的时间(毫秒)(默认值:2000)screenshot(布尔值,可选):填充后是否截图(默认值:true)
退货:
status(string):“成功”或“错误”original_url(string):导航到的原始URLcurrent_url(string):表单提交后的当前URLtitle(string):页面标题filled_fields(array):显示哪些字段已成功填充的对象列表submitted(boolean):表单是否已提交screenshot(字符串,可选):如果需要,可以使用Base64编码的屏幕截图screenshot_size(整数,可选):屏幕截图的大小(以字节为单位)
工具:剧作家execute.js
在网页上执行JavaScript并获得结果。
输入:
url(字符串,必填):要导航到的URLscript(string,必填):要执行的JavaScript代码(应返回JSON可序列化值)wait_time(整数,可选):页面加载后的等待时间(毫秒)(默认值:1000)
退货:
status(string):“成功”或“错误”url(string):导航到的URLtitle(string):页面标题result(any):JavaScript代码返回的结果
例子:
{
"url": "https://example.com",
"script": "document.querySelectorAll('a').length"
}工具:顺序思考
为解决问题和分析提供详细的、循序渐进的思维过程。
输入:
thought(string):当前思考步骤nextThoughtNeeded(boolean):是否需要另一个思考步骤thoughtNumber(整数):当前思想数totalThoughts(整数):估计所需的总想法isRevision(boolean,可选):这是否改变了之前的想法revisesThought(整数,可选):正在重新考虑哪个想法branchFromThought(整数,可选):分支点思想数branchId(字符串,可选):分支标识符needsMoreThoughts(boolean,可选):如果需要更多想法
安装
先决条件
- Python 3.11或更高版本
快速设置(推荐)
视窗
# Clone the repository
git clone https://github.com/mersdev/fast-api-mcp.git
cd fast-api-mcp
# Run the setup script (creates venv and installs dependencies)
setup.batLinux/Mac
# Clone the repository
git clone https://github.com/mersdev/fast-api-mcp.git
cd fast-api-mcp
# Make scripts executable
chmod +x setup.sh run.sh
# Run the setup script (creates venv and installs dependencies)
./setup.sh手动设置
如果您更喜欢手动设置:
# Clone the repository
git clone https://github.com/mersdev/fast-api-mcp.git
cd fast-api-mcp
# Create virtual environment
python -m venv .venv
# Activate virtual environment
# On Windows:
.venv\Scripts\activate
# On Linux/Mac:
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Install Playwright browsers (required for Playwright tools)
playwright install chromium注: Playwright工具需要安装Chromium。安装脚本将提示您安装它,或者您可以运行 playwright install chromium 安装Python依赖项后手动执行。
用法
运行服务器
快速入门(推荐)
窗户:
run.batLinux/Mac:
./run.sh手动启动
激活虚拟环境并运行服务器:
窗户:
.venv\Scripts\activate
python server.pyLinux/Mac:
source .venv/bin/activate
python server.py服务器将于启动 http://0.0.0.0:10000 默认情况下。
您可以使用自定义端口 PORT 环境变量:
PORT=8000 python server.py使用MCP检查器进行调试
- 确保您的虚拟环境已激活并安装了依赖项
- 启动检查器:
# Windows
.venv\Scripts\activate
mcp dev server.py
# Linux/Mac
source .venv/bin/activate
mcp dev server.py然后转到: http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=...
连接到光标
在Cursor中,在聊天设置>MCP服务器下添加您的MCP服务器:
{
"mcpServers": {
"sequential-thinking": {
"url": "http://localhost:10000/mcp/"
}
}
}✅ 备注:您必须包括尾随 / 在URL中。
连接到克劳德桌面
将此添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"sequential-thinking": {
"url": "http://localhost:10000/mcp/"
}
}
}与n8n工作流一起使用
Playwright工具旨在与n8n无缝协作。要使用它们:
- 启动MCP服务器 (确保它在配置的端口上运行)
- 在n8n中,使用HTTP请求节点 调用MCP工具:
- 方法:POST - 网址: http://localhost:10000/mcp/ (或您的服务器URL) - 正文:包含工具名称和参数的JSON
- 示例n8n HTTP截图请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "playwright_screenshot",
"arguments": {
"url": "https://example.com",
"full_page": true
}
}
}- 示例n8n web抓取的HTTP请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "playwright_scrape_text",
"arguments": {
"url": "https://example.com",
"selector": ".content"
}
}
}- 处理响应 在后续的n8n节点中,屏幕截图采用base64编码,可以直接保存或处理。
常见n8n用例:
- 自动网站监控和屏幕截图
- 用于数据收集的网络抓取
- 测试表单自动化
- 从动态网站中提取内容
- 用于高级数据提取的JavaScript执行
用例
顺序思维工具
- 将复杂问题分解为步骤
- 规划和设计,有修改空间
- 可能需要修正航向的分析
- 最初可能不清楚全部范围的问题
- 需要在多个步骤中保持上下文的任务
- 需要过滤掉无关信息的情况
剧作家工具
- Web剪贴:从动态网站中提取文本或HTML内容
- 灯光监视:捕获网站截图以进行更改检测
- 测试:自动化UI测试和验证
- 表单自动化:以编程方式填写和提交表单
- 数据提取:执行自定义JavaScript以进行高级数据收集
- n8n工作流:将浏览器自动化集成到工作流自动化中
- API备选方案:访问没有API的web内容
环境变量
PORT:服务器端口(默认值:10000)DISABLE_THOUGHT_LOGGING:设置为true禁用控制台的思想记录(默认值:false)
测试
测试回声工具
要验证回声工具是否正常工作:
# Windows
.venv\Scripts\activate
python test_echo.py
# Linux/Mac
source .venv/bin/activate
python test_echo.py回声测试验证:
- ✅ 简单消息回声
- ✅ 空消息处理
- ✅ 长消息支持
- ✅ 特殊字符支持
- ✅ 正确的长度计算
测试顺序思维工具
要验证顺序思维工具是否正常工作:
# Windows
.venv\Scripts\activate
python test_tool.py
# Linux/Mac
source .venv/bin/activate
python test_tool.py测试脚本验证:
- ✅ 工具返回正确的字典输出(不是JSON字符串)
- ✅ 思维排序工作正常
- ✅ 修订处理得当
- ✅ 思想史得以维护
- ✅ 没有Pydantic验证错误
项目结构
.
├── server.py # Main FastAPI MCP server (with echo & sequential_thinking tools)
├── sequential_thinking/ # Sequential thinking library
│ ├── __init__.py
│ └── lib.py # Core logic for thought processing
├── test_echo.py # Test script for the echo tool
├── test_tool.py # Test script for the sequential thinking tool
├── setup.bat # Windows setup script
├── setup.sh # Linux/Mac setup script
├── run.bat # Windows run script
├── run.sh # Linux/Mac run script
├── requirements.txt # Python dependencies
├── pyproject.toml # Project metadata
├── runtime.txt # Python runtime version
├── .python-version # Python version for pyenv/uv
├── .gitignore # Git ignore rules
├── FIX_SUMMARY.md # Documentation of the validation error fix
└── README.md # This file运作原理
服务器使用FastMCP库通过HTTP公开多个MCP工具:
回声工具
一个简单的工具:
- 接受消息字符串
- 返回消息及其长度
- 可用于测试MCP连接
剧作家工具
无浏览器自动化工具:
- 使用单例Playwright浏览器实例以提高效率
- 在无头模式下运行(不需要GUI)
- 支持截图(base64编码)、文本/HTML提取、点击、表单填充和JavaScript执行
- 返回结构化JSON响应,非常适合n8n工作流
- 使用详细的错误消息优雅地处理错误
- 使用异步操作以获得更好的性能
顺序思维工具
一个复杂的工具,它:
- 接受带有元数据的思想输入(思想数量、总思想等)
- 验证输入数据
- 保持思想史
- 支持对先前想法的分支和修订
- 返回带有思维状态的结构化响应
发展
运行测试
# Install dev dependencies
uv pip install pytest
# Run tests (if available)
pytest编码结构
- 服务器.py:FastAPI服务器设置和工具定义
- sequential_thinking/lib.py:核心顺序思维逻辑
- ThoughtData:用于思维表示的数据类 - SequentialThinkingServer:用于处理思想的主服务器类
许可证
MIT许可证
鸣谢
基于:
- 顺序思维MCP服务器 通过Anthropic
- 基于流式HTTP的MCP服务器 作者:Alejandro AO
贡献
欢迎投稿!请随时提交拉取请求。
故障排除
服务器无法启动
- 确保已安装Python 3.11+
- 检查端口10000是否可用
- 验证是否安装了所有依赖项:
pip list - 确保虚拟环境已激活
工具未出现在AI助手中
- 添加配置后重新启动AI助手
- 检查服务器是否正在运行
- 验证配置中的URL是否正确
- 检查服务器日志是否有任何错误
验证错误:“输入应该是有效的词典”
此错误已 固定的 在最新版本中。该工具现在可以正确返回字典对象,而不是JSON字符串。
要验证修复程序,请执行以下操作:
python test_tool.py如果您仍然看到此错误:
- 确保您拥有最新版本:
git pull - 重新启动服务器
- 清除AI助手中的所有缓存连接
- 检查一下
server.py导入json并解析结果
端口已在使用中
# Change the port
PORT=8000 python server.py支持
有关问题和疑问,请在 .
