website/docs/user-guide/skills/optional/mcp/mcp-fastmcp.md
Build, test, inspect, install, and deploy MCP servers with FastMCP in Python. Use when creating a new MCP server, wrapping an API or database as MCP tools, exposing resources or prompts, or preparing a FastMCP server for Claude Code, Cursor, or HTTP deployment.
| Source | Optional — install with hermes skills install official/mcp/fastmcp |
| Path | optional-skills/mcp/fastmcp |
| Version | 1.0.0 |
| Author | Hermes Agent |
| License | MIT |
| Platforms | linux, macos, windows |
| Tags | MCP, FastMCP, Python, Tools, Resources, Prompts, Deployment |
| Related skills | native-mcp, mcporter |
:::info The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active. :::
Build MCP servers in Python with FastMCP, validate them locally, install them into MCP clients, and deploy them as HTTP endpoints.
Use this skill when the task is to:
Use native-mcp when the server already exists and only needs to be connected to Hermes. Use mcporter when the goal is ad-hoc CLI access to an existing MCP server instead of building one.
Install FastMCP in the working environment first:
pip install fastmcp
fastmcp version
For the API template, install httpx if it is not already present:
pip install httpx
templates/api_wrapper.py - REST API wrapper with auth header supporttemplates/database_server.py - read-only SQLite query servertemplates/file_processor.py - text-file inspection and search serverscripts/scaffold_fastmcp.py - copy a starter template and replace the server name placeholderreferences/fastmcp-cli.md - FastMCP CLI workflow, installation targets, and deployment checksChoose the narrowest useful surface area first:
Prefer a thin server with good names, docstrings, and schemas over a large server with vague tools.
Copy a template directly or use the scaffold helper:
python ~/.hermes/skills/mcp/fastmcp/scripts/scaffold_fastmcp.py \
--template api_wrapper \
--name "Acme API" \
--output ./acme_server.py
Available templates:
python ~/.hermes/skills/mcp/fastmcp/scripts/scaffold_fastmcp.py --list
If copying manually, replace __SERVER_NAME__ with a real server name.
Start with @mcp.tool functions before adding resources or prompts.
Rules for tool design:
Good tool examples:
get_customersearch_ticketsdescribe_tablesummarize_text_fileWeak tool examples:
runprocessdo_thingAdd @mcp.resource when the client benefits from fetching stable read-only content such as schemas, policy docs, or generated reports.
Add @mcp.prompt when the server should provide a reusable prompt template for a known workflow.
Do not turn every document into a prompt. Prefer:
Use the FastMCP CLI for local validation:
fastmcp inspect acme_server.py:mcp
fastmcp list acme_server.py --json
fastmcp call acme_server.py search_resources query=router limit=5 --json
For fast iterative debugging, run the server locally:
fastmcp run acme_server.py:mcp
To test HTTP transport locally:
fastmcp run acme_server.py:mcp --transport http --host 127.0.0.1 --port 8000
fastmcp list http://127.0.0.1:8000/mcp --json
fastmcp call http://127.0.0.1:8000/mcp search_resources query=router --json
Always run at least one real fastmcp call against each new tool before claiming the server works.
FastMCP can register the server with supported MCP clients:
fastmcp install claude-code acme_server.py
fastmcp install claude-desktop acme_server.py
fastmcp install cursor acme_server.py -e .
Use fastmcp discover to inspect named MCP servers already configured on the machine.
When the goal is Hermes integration, either:
~/.hermes/config.yaml using the native-mcp skill, orFor managed hosting, Prefect Horizon is the path FastMCP documents most directly. Before deployment:
fastmcp inspect acme_server.py:mcp
Make sure the repo contains:
requirements.txt or pyproject.tomlFor generic HTTP hosting, validate the HTTP transport locally first, then deploy on any Python-compatible platform that can expose the server port.
Use when exposing a REST or HTTP API as MCP tools.
Recommended first slice:
Implementation notes:
Start from templates/api_wrapper.py.
Use when exposing safe query and inspection capabilities.
Recommended first slice:
list_tablesdescribe_tableImplementation notes:
SELECT SQL in early versionsStart from templates/database_server.py.
Use when the server needs to inspect or transform files on demand.
Recommended first slice:
Implementation notes:
Start from templates/file_processor.py.
Before handing off a FastMCP server, verify all of the following:
fastmcp inspect <file.py:mcp> succeedsfastmcp list <server spec> --json succeedsfastmcp callInstall the package in the active environment:
pip install fastmcp
fastmcp version
fastmcp inspect failsCheck that:
<file.py:object>Run:
fastmcp list server.py --json
fastmcp call server.py your_tool_name --json
This usually exposes naming mismatches, missing required arguments, or non-serializable return values.
The server-building part may be correct while the Hermes config is not. Load the native-mcp skill and configure the server in ~/.hermes/config.yaml, then restart Hermes.
For CLI details, install targets, and deployment checks, read references/fastmcp-cli.md.