mcpd Python SDK
Project description
mcpd-sdk-python
mcpd-sdk-python is a lightweight Python SDK for interacting with the mcpd application.
A daemon that exposes MCP server tools via a simple HTTP API.
This SDK provides high-level and dynamic access to those tools, making it easy to integrate with scripts, applications, or agentic frameworks.
Features
- Discover and list available
mcpdhosted MCP servers - Retrieve tool definitions and schemas for one or all servers
- Dynamically invoke any tool using a clean, attribute-based syntax
- Generate self-contained, deepcopy-safe tool functions for frameworks like any-agent
- Minimal dependencies (
requestsandcachetoolsonly)
Installation in your project
Assuming you are using uv, include it in your pyproject.toml:
uv add mcpd
Dev Setup
Use the Makefile target to ensure uv is installed, and your virtual environment is active and sync'd.
make setup
Testing
Ensure you have the correct dependencies installed for testing:
uv sync --group tests
Then to run all tests:
uv run pytest tests
... or via Makefile:
make test
Lint files using:
make lint
Quick Start
from mcpd import McpdClient, McpdError
client = McpdClient(api_endpoint="http://localhost:8090")
# List available servers
print(client.servers())
# Example: ['time', 'fetch', 'git']
# List tool definitions (schemas) for a specific server
print(client.tools(server_name="time"))
# Dynamically call a tool
try:
result = client.call.time.get_current_time(timezone="UTC")
print(result)
except McpdError as e:
print(f"Error: {e}")
Agentic Usage
Generate dynamic functions suitable for AI agents:
from any_agent import AnyAgent, AgentConfig
from mcpd import McpdClient
# Assumes the mcpd daemon is running
client = McpdClient(api_endpoint="http://localhost:8090")
agent_config = AgentConfig(
tools=client.agent_tools(),
model_id="gpt-4.1-nano", # Requires OPENAI_API_KEY to be set
instructions="Use the tools to answer the user's question."
)
agent = AnyAgent.create("mcpd-agent", agent_config)
response = agent.run("What is the current time in Tokyo?")
print(response)
Examples
A working SDK examples are available in the examples/ folder,
please refer to the relevant example for execution details.
| Method | Docs |
|---|---|
| AnyAgent | README.md |
| Manual | README.md |
| Pydantic AI | README.md |
API
Initialization
from mcpd import McpdClient
# Initialize the client with your mcpd API endpoint.
# api_key is optional and sends an 'MCPD-API-KEY' header.
# server_health_cache_ttl is optional and sets the time in seconds to cache a server health response.
client = McpdClient(api_endpoint="http://localhost:8090", api_key="optional-key", server_health_cache_ttl=10)
Core Methods
-
client.servers() -> list[str]- Returns a list of all configured server names. -
client.tools() -> dict[str, list[dict]]- Returns a dictionary mapping each server name to a list of its tool schema definitions. -
client.tools(server_name: str) -> list[dict]- Returns the tool schema definitions for only the specified server. -
client.agent_tools() -> list[Callable]- Returns a list of self-contained, callable functions suitable for agentic frameworks. -
client.clear_agent_tools_cache()- Clears cached generated callable functions that are created when calling agent_tools(). -
client.has_tool(server_name: str, tool_name: str) -> bool- Checks if a specific tool exists on a given server. -
client.call.<server_name>.<tool_name>(**kwargs)- The primary way to dynamically call any tool using keyword arguments. -
client.server_health() -> dict[str, dict]- Returns a dictionary mapping each server name to the health information of that server. -
client.server_health(server_name: str) -> dict- Returns the health information for only the specified server. -
client.is_server_healthy(server_name: str) -> bool- Checks if the specified server is healthy and can handle requests.
Error Handling
All SDK-level errors, including HTTP and connection errors, will raise a McpdError exception.
The original exception is chained for full context.
License
Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcpd-0.0.2.tar.gz.
File metadata
- Download URL: mcpd-0.0.2.tar.gz
- Upload date:
- Size: 423.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e2bfc685e237d9e1ca6c4bcca22bd083b50a65280e7f5ec21d6f45059bb28b1
|
|
| MD5 |
e6de9a62e951f9b26c54730496ea062f
|
|
| BLAKE2b-256 |
776807add04e4a70dd7be16fa47e3e34f3d9fc90c2cf0f6f1cd35257adcb7ef3
|
Provenance
The following attestation bundles were made for mcpd-0.0.2.tar.gz:
Publisher:
release.yaml on mozilla-ai/mcpd-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcpd-0.0.2.tar.gz -
Subject digest:
9e2bfc685e237d9e1ca6c4bcca22bd083b50a65280e7f5ec21d6f45059bb28b1 - Sigstore transparency entry: 533544428
- Sigstore integration time:
-
Permalink:
mozilla-ai/mcpd-sdk-python@b48657b712fd66571f15c9b259feea11242734a7 -
Branch / Tag:
refs/tags/0.0.2 - Owner: https://github.com/mozilla-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@b48657b712fd66571f15c9b259feea11242734a7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcpd-0.0.2-py3-none-any.whl.
File metadata
- Download URL: mcpd-0.0.2-py3-none-any.whl
- Upload date:
- Size: 28.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01192e1276d2a03df41a2952f2a9f3b45828dafdbcf46e68f57886140bae68c3
|
|
| MD5 |
9eda66a9a544ba0c032126c8ccb1837e
|
|
| BLAKE2b-256 |
2a2a23b998812803c47bf8b63adbda75f31b76c2c236a2d75121c295023e4732
|
Provenance
The following attestation bundles were made for mcpd-0.0.2-py3-none-any.whl:
Publisher:
release.yaml on mozilla-ai/mcpd-sdk-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcpd-0.0.2-py3-none-any.whl -
Subject digest:
01192e1276d2a03df41a2952f2a9f3b45828dafdbcf46e68f57886140bae68c3 - Sigstore transparency entry: 533544433
- Sigstore integration time:
-
Permalink:
mozilla-ai/mcpd-sdk-python@b48657b712fd66571f15c9b259feea11242734a7 -
Branch / Tag:
refs/tags/0.0.2 - Owner: https://github.com/mozilla-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@b48657b712fd66571f15c9b259feea11242734a7 -
Trigger Event:
release
-
Statement type: