MCP客户端工具

一个提供多种传输方式(包括stdio、HTTP和HTTP+SSE)以连接和操作MCP服务器的Python客户端工具。

  • by AnswerDotAI
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 AnswerDotAI/solvemcp

使用说明

solvemcp

它提供:

  • stdio 本地子流程服务器的传输。
  • 现代MCP服务器的流式HTTP传输。
  • 旧服务器的传统HTTP+SSE回退。
  • 动态Python可调用由返回的工具 tools/list.

安装

pip install solvemcp

快速开始

连接到本地stdio服务器

from solvemcp import MCPClient
with MCPClient.stdio([sys.executable, "-u", "../tests/echoserver.py"]) as mcp:
    print(list(mcp.tools))
    res = mcp.echo(text="hello")
    print(res)
['echo']
{'content': [{'type': 'text', 'text': 'hello'}]}

连接到HTTP MCP服务器

with MCPClient.http("https://mcp.grep.app") as mcp:
    print(list(mcp.tools))
    res = mcp.searchGitHub(query="class PtyProcess", language=["Python"])
['searchGitHub']
mcp = MCPClient.http("https://mcp.grep.app")
print(list(mcp.tools))
res = mcp.searchGitHub(query="class PtyProcess", language=["Python"])
['searchGitHub']
mcp.searchGitHub?
def searchGitHub(
    query:Any, matchCase:Any=False, matchWholeWords:Any=False, useRegexp:Any=False, repo:Any=None, path:Any=None,
    language:list=None
):
Find real-world code examples from over a million public GitHub repositories to help answer programming questions.

**IMPORTANT: This tool searches for literal code patterns (like grep), not keywords. Search for actual code that would appear in files:**
- ✅ Good: 'useState(', 'import React from', 'async function', '(?s)try {.*await'
- ❌ Bad: 'react tutorial', 'best practices', 'how to use'

**When to use this tool:**
- When implementing unfamiliar APIs or libraries and need to see real usage patterns
- When unsure about correct syntax, parameters, or configuration for a specific library
- When looking for production-ready examples and best practices for implementation
- When needing to understand how different libraries or frameworks work together

**Perfect for questions like:**
- "How do developers handle authentication in Next.js apps?" → Search: 'getServerSession' with language=['TypeScript', 'TSX']
- "What are common React error boundary patterns?" → Search: 'ErrorBoundary' with language=['TSX']
- "Show me real useEffect cleanup examples" → Search: '(?s)useEffect\(\(\) => {.*removeEventListener' with useRegexp=true
- "How do developers handle CORS in Flask applications?" → Search: 'CORS(' with matchCase=true and language=['Python']

Use regular expressions with useRegexp=true for flexible patterns like '(?s)useState\(.*loading' to find useState hooks with loading-related variables. Prefix the pattern with '(?s)' to match across multiple lines.

Filter by language, repository, or file path to narrow results.

文件: ~/aai-ws/toolslm/toolslm/funccall.py

类型: 功能

mcp.close()
cts = res['content']
print(len(cts))
10
print(cts[0]['text'][:500])
Repository: sedwards2009/extraterm
Path: extensions/ProxySessionBackend/src/python/ptyprocess/ptyprocess.py
URL: https://github.com/sedwards2009/extraterm/blob/master/extensions/ProxySessionBackend/src/python/ptyprocess/ptyprocess.py
License: MIT

Snippets:
--- Snippet 1 (Line 79) ---
            (intr, eof) = (3, 4)
    
    _INTR = _byte(intr)
    _EOF = _byte(eof)

class PtyProcessError(Exception):
    """Generic error class for this package."""

# setecho and setwinsize are pulled out here b

工具调用如何工作

对于每个具有有效Python标识符名称的服务器工具, MCPClient 动态添加方法。示例:名为的服务器工具 echo 成为 mcp.echo(...).

等效形式:

mcp.echo(text="hi")
mcp.call_tool("echo", text="hi")

流媒体

对于流式HTTP服务器,请使用 rpc_stream 或 call_tool_stream:

for msg in mcp.rpc_stream("tools/list", params={}): print(msg)

发展

模块布局

  • solvemcp/client.py: MCPClient 请求生命周期、初始化, 工具绑定和RPC帮助程序。
  • solvemcp/transports.py:传输实现加上SSE解析器 以及错误类型。

运行测试:

python tests/tests.py