MSPaint MCP Server with AI-based Planning Algorithms
使用高级 AI 提示来增强 LLM 规划,以解决复杂的数学问题并在画图画布上绘制答案。 (Shǐyòng gāojí AI tíshì lái zēngqiáng LLM guīhuà, yǐ jiějué fùzá de shùxué wèntí bìng zài huàtú huàbù shàng huìzhì dá'àn.)
shettysaish20
README
基于AI规划算法的MSPaint MCP服务器
本项目演示了如何使用高级AI提示,使LLM能够稳健地处理多步骤的复杂数学问题。它使用模型上下文协议(MCP)来允许由Google的Gemini模型驱动的AI代理与传统的Windows应用程序(MSPaint)进行交互。AI代理利用使用fastmcp
定义的工具和使用pywinauto
实现的工具来解决数学问题,然后在Paint画布上绘制解决方案。
目录
简介
本项目展示了使用高级AI提示,使LLM能够稳健地处理多步骤的复杂数学问题。
针对此问题陈述的结构化提示
你是一个具有绘画技巧的数学代理,逐步解决复杂的数学表达式。
你可以访问各种数学工具进行计算和验证,以及MSPaint应用程序在画布上绘制和呈现你的解决方案。
可用工具:
{tools_description}
MSPaint应用程序信息:
- 矩形坐标:x1 = 763, y1 = 595, x2 = 1788, y2 = 1123
你必须以以下格式之一回复,且只能回复一行(没有其他文本):
1. 对于函数调用:
FUNCTION_CALL: {{"name": function_name, "arguments": {{"param1": value1, "param2": value2}}}}
2. 对于最终答案:
FINAL_ANSWER: <NUMBER>
3. 对于完成任务:
COMPLETE_RUN
说明:
- 首先,仅调用一次show_reasoning工具,其中包含所有逐步推理步骤的列表,解释你将如何解决问题。一旦调用,在任何情况下都不要再次调用它。
- 在推理时,使用推理类型标记每个步骤(例如,[算术],[逻辑检查])。
- 使用所有可用的数学工具逐步解决问题。
- 当函数返回多个值时,处理所有这些值。
- 应用BODMAS规则:从最里面的括号开始,然后向外工作。
- 不要跳过步骤 - 顺序执行所有计算。
- 每次只回复一行。
- 每次响应只调用一个工具。
- 计算出一个数字后,通过调用以下函数来验证它:
FUNCTION_CALL: {{"name": "verify_calculation", "arguments": {{"expression": <MATH_EXPRESSION>, "expected": <NUMBER>}}}}
- 如果verify_calculation返回False,请重新评估你之前的步骤。
- 一旦你得到最终答案,通过调用以下函数来检查所有步骤和计算的一致性:
FUNCTION_CALL: {{"name": "verify_consistency", "arguments": {{"steps": [[<MATH_EXPRESSION1>, <ANSWER1>], [<MATH_EXPRESSION2>, <ANSWER2>], ...]}}}}
- 如果verify_consistency返回False,请重新评估你之前的步骤。
- 一旦verify_consistency返回True,请将你的最终结果提交为:
FINAL_ANSWER: <NUMBER>
绘画说明:
- 要在Paint中绘图,请严格按照以下顺序操作:
1. 调用open_paint以启动Paint应用程序。
2. 使用verify_paint_open验证Paint是否已打开。
3. 如果verify_paint_open返回False,请重试打开Paint,直到成功为止。
4. Paint打开后,使用正确的参数使用draw_rectangle绘制一个矩形。
5. 使用add_text_in_paint添加文本,插入你的FINAL_ANSWER: <NUMBER>。
最后一步:
- 完成所有计算、验证和绘图后,调用:
COMPLETE_RUN
严格遵守上述准则。
你的整个响应应该始终是以FUNCTION_CALL:、FINAL_ANSWER:或COMPLETE_RUN开头的一行。
ChatGPT结构化提示评估结果
{
"explicit_reasoning": true,
"structured_output": true,
"tool_separation": true,
"conversation_loop": true,
"instructional_framing": true,
"internal_self_checks": true,
"reasoning_type_awareness": true,
"fallbacks": true,
"overall_clarity": "极其强大的提示 - 它仔细地强制执行逐步推理、结构化输出、错误处理和工具使用分离。可以进行非常小的改进,例如给出一个简短的已完成示例,但即使没有它,稳健性也非常好。"
}
项目结构
├── MSPaint-MCP-Server/
│ ├── mcp_server.py # 定义MCP服务器,其中包含用于Paint自动化的工具
│ ├── mcp_client.py # 定义MCP客户端,该客户端与服务器和AI模型交互
│ ├── requirements.txt # 列出项目依赖项
│ └── .env # 存储Gemini API密钥
├── README.md # 此文件
要求
- Python 3.11+
- Conda(推荐用于环境管理)
- Google Gemini API密钥
- pywin32
- pywinauto
- fastmcp
- python-dotenv
- google-genai
- rich
设置
-
创建Conda环境:
conda create -n eagenv python=3.11 conda activate eagenv
-
安装依赖项:
pip install -r requirements.txt
-
设置Gemini API密钥:
-
在目录中创建一个
.env
文件。 -
将你的Gemini API密钥添加到
.env
文件:GEMINI_API_KEY=YOUR_API_KEY
-
用法
-
运行MCP客户端:
python mcp_paint_app/mcp_client.py
这将启动MCP客户端,该客户端连接到MCP服务器,初始化AI代理,并开始自动化过程。
工作原理
-
MCP服务器 (
mcp_server.py
):- 定义用于与MSPaint交互的工具(例如,
open_paint
,draw_rectangle
,add_text_in_paint
)和各种数学运算(例如,add
,subtract
,multiply
,divide
,verify_calculation
,verify_consistency
)。 - 使用
pywinauto
来控制MSPaint应用程序。 - 通过
fastmcp
库公开这些工具。
- 定义用于与MSPaint交互的工具(例如,
-
MCP客户端 (
mcp_client.py
):- 连接到MCP服务器。
- 使用Google Gemini模型来生成指令并解决给定的数学表达式。
- 解析模型的输出以确定要调用哪个工具。
- 使用所需的参数在MCP服务器上调用相应的工具。
- 处理来自工具的响应,并将其反馈给模型以进行下一步。
- 协调在MSPaint中绘制最终答案。
-
AI代理 (Google Gemini):
- 接收一个复杂的数学表达式(例如,
((3000 - (400+552)) / 2 + 1024
)。 - 使用可用的工具(在系统提示中定义)逐步解决问题。
- 生成函数调用(例如,
FUNCTION_CALL: {"name": "add", "arguments" {"a": 400, "b": 552}}
)以使用这些工具。 - 使用
verify_calculation
工具验证每个计算。 - 使用
verify_consistency
工具确保所有步骤的一致性。 - 一旦获得并验证了最终答案,它将使用Paint通过打开Paint,绘制矩形并将最终答案添加为文本来显示结果。
- 通过调用
COMPLETE_RUN
命令完成运行。
- 接收一个复杂的数学表达式(例如,
关键组件
mcp_server.py
: 包含用于自动化MSPaint的核心逻辑。open_paint
,draw_rectangle
和add_text_in_paint
函数是AI代理使用的关键工具。mcp_client.py
: 管理AI代理和MCP服务器之间的交互。它设置系统提示,调用工具并处理响应。requirements.txt
: 列出项目所需的所有Python软件包。- .env: 存储Google Gemini API密钥。
故障排除
- 权限问题: 如果遇到权限问题,请尝试以管理员身份运行脚本。
- 坐标问题: 用于在MSPaint中单击的坐标可能需要根据你的屏幕分辨率和窗口大小进行调整。使用代码中的调试打印语句来确定正确的坐标。
- 工具选择问题: 如果AI代理未选择正确的工具,请查看系统提示并确保工具描述准确无误。
- API密钥问题: 确保你的Gemini API密钥已在
.env
文件中正确设置。
贡献
欢迎贡献!请提交包含你的更改的pull request。
许可证
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。