mcp-server-kit
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-kitextract the text and tables from report.pdf"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-kit
Shared plumbing for Python MCP servers built on the official SDK's FastMCP
(mcp.server.fastmcp). It covers the parts every server ends up copying:
Module | What it does |
| Registers each sync tool as an async wrapper that runs the body in a worker thread, so one blocking upstream call can't freeze every other request. The SDK runs sync handlers inline on the event loop. Signatures, and so input schemas, are unchanged. Every call, sync or async, logs one |
| Pure ASGI bearer-token gate (timing-safe compare, streaming-safe). Only |
|
|
| A liveness probe for containers: a full HTTP round-trip to |
| Collision-safe staging for a directory several servers share: bare names only, never overwrite ( |
| PDF text extraction (pdfplumber text / layout / tables), page rendering (pypdfium2), and OCR through an xberg server (tesseract, or a vision model for hard pages). Configured by |
Install
uv add mcp-server-kit # or: pip install mcp-server-kitIt pins mcp>=1,<2, so the SDK range lives in one place for every server built on the kit.
Related MCP server: mymcpservercli
Use
import logging
import os
from mcp.server.fastmcp import FastMCP
from mcp_server_kit import offload_sync_tools, serve
mcp = FastMCP("example", instructions="...", stateless_http=True, json_response=True)
offload_sync_tools(mcp, logger_name="example_mcp.requests") # before the first @mcp.tool()
@mcp.tool()
def lookup(query: str) -> str:
"""A blocking call is fine here: it runs in a worker thread."""
...
def main() -> None:
logging.basicConfig(level=logging.INFO)
serve(mcp, port=8000, bearer_token=os.environ.get("MCP_BEARER_TOKEN", ""))lookup stays a plain function, so tests and other tools can call it directly.
To give every tool the same annotations unless it passes its own:
offload_sync_tools(mcp, logger_name=..., default_annotations=ToolAnnotations(readOnlyHint=True)).
Healthcheck module for a container (HealthCmd=python -m example_mcp.healthcheck):
from mcp_server_kit.healthcheck import probe
def main() -> None:
probe(8000)
if __name__ == "__main__":
main()Shared non-thread-safe clients (e.g. cached httplib2 objects) need a lock in the
server. Thread-safe ones (httpx.Client, requests.Session) don't.
Develop
uv sync --extra test
uv run pytest -qMIT licensed.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
Zero-install remote MCP server for proof-of-existence file attestation.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Related MCP Servers
- AlicenseAqualityDmaintenanceA lightweight framework for building and running Model Context Protocol (MCP) servers using FastMCP, providing tools for development, debugging, and server management.4MIT
- FlicenseBqualityDmaintenanceA Model Context Protocol server framework featuring dynamic tool loading and automatic tool discovery from a dedicated directory. It leverages FastMCP to provide a robust environment for building, configuring, and testing individual Python-based tools.1-
- AlicenseNot gradedqualityDmaintenanceA bare-bones FastMCP server template designed to serve as a starting point for building custom Model Context Protocol servers. It provides a foundational structure for implementing tools over HTTP and includes a built-in health check utility.GPL 3.0
- AlicenseNot gradedqualityDmaintenanceA production-ready FastMCP server template supporting local development with stdio and secure web deployment with HTTPS and OAuth.4MIT