The Model Context Protocol server that exposes attune workflows, help, and memory as tools
Tasks
Inspect the server's surface from Python
Goal: see the registered tools, resources, and prompts without a client.
Steps:
from attune.mcp import create_server
server = create_server()
print(len(server.tools), "tools")
print([r["uri"] for r in server.get_resource_list()])
print([p["name"] for p in server.get_prompt_list()])
Verify: create_server() returns a ready EmpathyMCPServer.
server.tools is the merged registry — the 41 built-in tools plus any
registered by installed plugins (e.g. attune-redis adds five redis_*
tools), so the printed count is ≥ 41. get_resource_list() returns the
three attune://… resources; get_prompt_list() returns
security-scan / test-gen / cost-report.
Call a tool programmatically
Goal: dispatch a tool the way the MCP client would.
Steps:
import asyncio
from attune.mcp import create_server
async def main() -> None:
server = create_server()
result = await server.call_tool("auth_status", {})
print(result)
asyncio.run(main())
Verify: call_tool(name, arguments) is a coroutine — await it.
It looks the handler up in the dispatch table and returns the tool's
result dict. Rate limiting applies (60 calls / 60 s by default).
Register the server with a client
Goal: make the tools available in Claude Code.
Steps: add an mcpServers entry that runs python -m attune.mcp.server (see Quickstart). The plugin's bundled .mcp.json
uses uvx --from attune-ai python -m attune.mcp.server; a local
checkout uses uv run python -m attune.mcp.server.
Verify: after connecting, the attune tools appear in the client.
Server logs land in <tmp>/attune/attune-mcp.log if you need to
debug the connection.