solvemcp
It provides:
stdiotransport for local subprocess servers.- Streamable HTTP transport for modern MCP servers.
- Legacy HTTP+SSE fallback for older servers.
- Dynamic Python callables for tools returned by
tools/list.
Installation
pip install solvemcp
Quick Start
Connect to a local stdio server
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'}]}
Connect to an HTTP MCP server
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.
File: ~/aai-ws/toolslm/toolslm/funccall.py
Type: function
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
How Tool Calls Work
For each server tool with a valid Python identifier name, MCPClient
adds a method dynamically. Example: a server tool named echo becomes
mcp.echo(...).
Equivalent forms:
mcp.echo(text="hi")
mcp.call_tool("echo", text="hi")
Streaming
For Streamable HTTP servers, use rpc_stream or call_tool_stream:
for msg in mcp.rpc_stream("tools/list", params={}): print(msg)
Development
Module Layout
solvemcp/client.py:MCPClientrequest lifecycle, initialization, tool binding, and RPC helpers.solvemcp/transports.py: transport implementations plus SSE parsers and error types.
Run tests:
python tests/tests.py
Metadata
Release files for solvemcp 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| solvemcp-0.0.2.tar.gz | 18.7 kB | Without provenance | Details for solvemcp-0.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| solvemcp-0.0.2-py3-none-any.whl | Python 3 | none | any | Details for solvemcp-0.0.2-py3-none-any.whl |
Total release size: 34.7 kB
Release files / solvemcp-0.0.2.tar.gz
| Download URL | solvemcp-0.0.2.tar.gz |
|---|---|
| Size | 18.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9d578cdd211b071855bee46c53effc1dd9a5a955837a2ebd8a2a4cc7b1a21372
|
|
BLAKE2b-256 checksum How to use checksums |
d11a013513402cccb58f7c3d9ab7b8e85eea53b415f0601ee57b9fde13f27b70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Release files / solvemcp-0.0.2-py3-none-any.whl
| Download URL | solvemcp-0.0.2-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
81686150718df99b89a4def5ef67f9123ed3b699a4658cfbffc53721124f790d
|
|
BLAKE2b-256 checksum How to use checksums |
d59568a860dee91a46f3833261b90950737bcb5b121d8abbd2f148a887f6a45d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.2
|
Security for solvemcp 0.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.