loading…
Search for a command to run...
loading…
A reference implementation of a Model Context Protocol server that demonstrates core primitives including tools, resources, and prompts. It enables users to per
A reference implementation of a Model Context Protocol server that demonstrates core primitives including tools, resources, and prompts. It enables users to perform basic arithmetic operations and manage notes through a simple storage system.
A simple MCP (Model Context Protocol) server for learning the core primitives: Tools, Resources, and Prompts.
uv sync
uv run mcp dev server.py
Opens a browser UI at http://localhost:6274. From there you can:
save_note, delete_note with custom inputsnotes://list or notes://{name}summarize_notes or brainstorm with argumentsmcp clientList all available tools:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | uv run python server.py
Add the server to your Claude Code session:
claude mcp add learning-mcp -- uv run --directory /Users/binod/projects/mcp-example python server.py
Verify it's connected:
claude mcp list
Once added, Claude Code can call your tools directly in the chat — just ask it to, e.g. "save a note called 'ideas'".
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"learning-mcp": {
"command": "uv",
"args": [
"run",
"--directory", "/Users/binod/projects/mcp-example",
"python", "server.py"
]
}
}
}
Then restart Claude Desktop.
Use the mcp library to call tools, read resources, and fetch prompts from your own code:
from mcp import ClientSession
from mcp.client.stdio import stdio_client, StdioServerParameters
import asyncio
async def main():
server = StdioServerParameters(
command="uv", args=["run", "python", "server.py"]
)
async with stdio_client(server) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
# Read a resource
notes = await session.read_resource("notes://list")
print(notes)
# Get a prompt
prompt = await session.get_prompt("brainstorm", {"topic": "side projects"})
print(prompt)
asyncio.run(main())
To let Claude (via Anthropic API) call your tools, add anthropic[mcp] to your dependencies and convert the tools:
from anthropic.lib.tools.mcp import async_mcp_tool
import anthropic
client = anthropic.AsyncAnthropic()
tools = [async_mcp_tool(t, session) for t in (await session.list_tools()).tools]
runner = client.beta.messages.tool_runner(
model="claude-opus-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Save a note called ideas"}],
tools=tools,
)
async for message in runner:
for block in message.content:
if hasattr(block, "text"):
print(block.text)
| File | Description |
|---|---|
server.py |
MCP server with tools, resources, and prompts |
pyproject.toml |
Project dependencies |
| Tool | Description |
|---|---|
save_note(name, content) |
Save a note |
delete_note(name) |
Delete a note |
| URI | Description |
|---|---|
notes://list |
List all saved notes |
notes://{name} |
Read a specific note |
| Prompt | Description |
|---|---|
summarize_notes |
Summarize all saved notes |
brainstorm(topic) |
Brainstorm ideas on a topic |
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-server-example": {
"command": "npx",
"args": []
}
}
}PRs, issues, code search, CI status
Database, auth and storage
Reference / test server with prompts, resources, and tools.
Secure file operations with configurable access controls.