# Easymcp

> A high performance MCP client sdk for python

- **Type:** MCP server
- **Install:** `agentstack add mcp-promptmesh-easymcp`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [promptmesh](https://agentstack.voostack.com/s/promptmesh)
- **Installs:** 0
- **Category:** [Integrations](https://agentstack.voostack.com/c/integrations)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [promptmesh](https://github.com/promptmesh)
- **Source:** https://github.com/promptmesh/easymcp
- **Website:** https://easymcp.promptmesh.io/

## Install

```sh
agentstack add mcp-promptmesh-easymcp
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# EasyMCP

EasyMCP is a complete rewrite of the model context protocol (MCP) in Python.

## Installation

```bash
uv add easymcp
```

## Usage

The high level API exposes a ClientManager class that can be used to manage multiple MCP servers.

```python
import asyncio
from easymcp.client.ClientManager import ClientManager
from easymcp.client.transports.stdio import StdioServerParameters

mgr = ClientManager()

searxng = StdioServerParameters(
    command="uvx",
    args=["mcp-searxng"],
)

timeserver = StdioServerParameters(
    command="uvx",
    args=["mcp-timeserver"],
)

servers = {
    "searxng": searxng,
    "timeserver": timeserver,
}

async def main():
    # initialize the client manager
    await mgr.init(servers=servers)

    # list servers
    print(mgr.list_servers())

    # remove a server
    await mgr.remove_server("searxng")

    # add a server
    await mgr.add_server("searxng", searxng)

    # list tools - these are namespaced by server name automatically
    # {server name}.{tool name}
    print(await mgr.list_tools())

    # call tool
    print(await mgr.call_tool("timeserver.get-current-time", {}))

    # list resources - these are namespaced by server name automatically
    # mcp-{server name}+{resource uri}
    print(await mgr.list_resources())

    # read resource
    print(await mgr.read_resource("mcp-timeserver+datetime://Africa/Algiers/now"))

    await asyncio.Future()

asyncio.run(main())
```

## Core Features

- list tools/resources/prompts caching out of the box
- automatic cache invalidation on tool/resource/prompt change notifications
- out of the box support for parallel requests to servers
- full lifecycle management of servers
- dynamic server addition/removal
- namespaced tools/resources/prompts
- lightweight asyncio native implementation

## Why namespace tools?

Namespaced tools remove need to perform a lookup to find the correct tool. This means:

- faster tool calls
- tool calls can be routed across many MCP hosts at scale
- mcp servers do not need globally unique tool names

## Why namespace resources?

Resources are namespaced in a way that makes it easy to make a resource URI to a specific server. You can:

- check if a URL needs to be resolved via mcp by checking if it starts with `mcp`
- check what server to resolve the URI with
- ingest resources into a search system like elastic search without having to store metadata about the server
- completely eliminate the need to map URIs to servers via a database or lookup table

## Comparison of classes to other MCP libraries

| **easyMCP**    | **modelcontextprotocol/python-sdk** |                              |
| -------------- | ----------------------------------- | ---------------------------- |
| ClientManager  |                                     | manages multiple MCP servers |
| ClientSession  | ClientSession                       | manages a single MCP server  |
| StdioTransport | stdio_client                        | raw subprocess transport     |

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [promptmesh](https://github.com/promptmesh)
- **Source:** [promptmesh/easymcp](https://github.com/promptmesh/easymcp)
- **License:** MIT
- **Homepage:** https://easymcp.promptmesh.io/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** yes
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-promptmesh-easymcp
- Seller: https://agentstack.voostack.com/s/promptmesh
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
