Skip to main content

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 mcpd hosted 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 (requests and cachetools only)

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

mcpd-0.0.2.tar.gz (423.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcpd-0.0.2-py3-none-any.whl (28.7 kB view details)

Uploaded Python 3

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

Hashes for mcpd-0.0.2.tar.gz
Algorithm Hash digest
SHA256 9e2bfc685e237d9e1ca6c4bcca22bd083b50a65280e7f5ec21d6f45059bb28b1
MD5 e6de9a62e951f9b26c54730496ea062f
BLAKE2b-256 776807add04e4a70dd7be16fa47e3e34f3d9fc90c2cf0f6f1cd35257adcb7ef3

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpd-0.0.2.tar.gz:

Publisher: release.yaml on mozilla-ai/mcpd-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for mcpd-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 01192e1276d2a03df41a2952f2a9f3b45828dafdbcf46e68f57886140bae68c3
MD5 9eda66a9a544ba0c032126c8ccb1837e
BLAKE2b-256 2a2a23b998812803c47bf8b63adbda75f31b76c2c236a2d75121c295023e4732

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page