MCP模块化服务器
使用FastMCP构建的模块化MCP(模型上下文协议)服务器。每个工具、提示和资源都存在于自己的文件中,不需要中央注册。
______________________________________________________________________
安装
1.克隆仓库并导航到项目目录。
2.创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate3.安装依赖项:
pip install -r requirements.txt______________________________________________________________________
文件结构
mcp-modular/
├── mcp_instance.py # Creates the shared MCP instance
├── server.py # Entry point — auto-loads all modules
├── requirements.txt
├── prompts/
│ ├── __init__.py
│ └── my_prompt.py # One prompt per file
├── tools/
│ ├── __init__.py
│ └── my_tool.py # One tool per file
└── resources/
├── __init__.py
└── my_resource.py # One resource per fileserver.py 自动发现并加载每个 .py 内部文件 prompts/, tools/,以及 resources/。你永远不需要手动注册任何东西。
______________________________________________________________________
添加新的提示、资源或工具
新刀具
在中创建文件 tools/例如。 tools/my_tool.py:
from mcp_instance import mcp
@mcp.tool()
async def my_tool(param: str) -> str:
"""Description of what this tool does."""
return f"Result: {param}"新建提示
在中创建文件 prompts/例如。 prompts/my_prompt.py:
from mcp_instance import mcp
@mcp.prompt()
async def my_prompt(context: str) -> str:
"""Description of what this prompt does."""
return f"You are a helpful assistant. Context: {context}"新建资源
在中创建文件 resources/例如。 resources/my_resource.py:
from mcp_instance import mcp
@mcp.resource("myapp://data/my-resource")
async def my_resource() -> str:
"""Description of this resource."""
return "Resource content here"就是这样——在其他任何地方都不需要进口或注册。服务器在下次运行时自动拾取它。
______________________________________________________________________
您需要的唯一进口
中的每个文件 prompts/, tools/,以及 resources/ 只需要一个导入:
from mcp_instance import mcp使用 mcp 对象来注册您的处理程序 @mcp.tool(), @mcp.prompt(),或 @mcp.resource(...).
______________________________________________________________________
电子邮件工具示例
该项目包括阅读和发送电子邮件的示例工具(tools/email_reader.py 和 tools/email_sender.py).如果你想使用这些工具,你需要在中设置你的凭据 .credentials/mail_credentials.yaml:
imap_host: imap.gmail.com # or any other IMAP server
smtp_host: smtp.gmail.com # or any other SMTP server
email_user: your_email@gmail.com
email_password: your_password_here
recipient_email: recipient_email@example.com关于密码的重要提示: 这 email_password 字段通常是 应用程序密码,这与您的标准登录密码不同。如果您使用的是Gmail,您可以在此处找到如何生成应用程序密码的说明: 使用应用程序密码登录-Gmail帮助.
______________________________________________________________________
文件访问工具
该项目包括三个以受限方式与本地文件系统交互的工具:
list_files:列出允许目录中的所有文件。read_file:读取特定文件的内容。create_file:用新内容创建或覆盖文件。
要使用这些工具,您必须在中配置允许的目录路径 .credentials/file_access.yaml:
access_dir: /path/to/your/allowed/directoryHelper函数
对于电子邮件和文件访问工具,凭据和配置加载逻辑都集中在 mcp_instance.py 通过两个辅助函数:
get_access_dir():从读取允许的目录路径file_access.yaml.load_email_credentials():从加载电子邮件配置mail_credentials.yaml.
______________________________________________________________________
更改服务器名称
打开 mcp_instance.py 并更新传递给的字符串 FastMCP:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("your-server-name-here")此名称是服务器向MCP客户端标识自身的方式。
______________________________________________________________________
运行客户端
client.py 是由Ollama提供支持的交互式聊天应用程序(llama3.1:8b).它连接到MCP服务器,将所有注册的工具暴露给模型,并运行一个对话循环,直到您键入 exit 或 quit.
先决条件: 奥拉玛 必须在本地运行 llama3.1:8b 模型已拉取:
ollama pull llama3.1:8b启动客户端 (服务器运行时):
python client.py用环境变量覆盖服务器地址:
MCP_HOST=127.0.0.1 MCP_PORT=9000 python client.py______________________________________________________________________
运行服务器
服务器支持两种传输方式: 上海证券交易所 (默认)和 标准.
SSE(HTTP)
python server.py开始 0.0.0.0:8000 默认情况下。用环境变量覆盖:
MCP_HOST=127.0.0.1 MCP_PORT=9000 python server.py标准
MCP_TRANSPORT=stdio python server.py当与通过标准输入/输出进行通信的客户端(例如Claude Desktop)集成时,请使用stdio。
