NTeALan词典MCP服务器 是一个模块化、可扩展的 模型上下文协议(MCP) 服务器 NTeALan REST API字典 以及捐款。该项目为管理词典数据、文章和用户贡献提供了一个统一的界面,旨在便于集成和扩展。
该项目部署在 https://apis.ntealan.net/ntealan/mcpserver.添加 /sse 连接到MCP客户端的路径。现在只能使用资源操作。
⚠️ 此开发端点有时可能不可用。只需创建一个问题,我们就会解决它。
](https://smithery.ai/server/@Levis0045/ntealan-apis-mcp-server)
  
______________________________________________________________________
🦜 目录
______________________________________________________________________
🦜 特性
- 字典管理:创建、更新、删除和检索字典及其元数据。
- 物品管理:管理词典中的文章,包括统计和过滤。
- 稿件管理:跟踪和管理用户对文章和词典的贡献。
- 可扩展MCP服务器:轻松添加新的资源和工具。
- 异步支持:建立在
fastmcp和aiohttp为了获得高性能。 - 类似OpenAPI的资源注册:使用URI和标签注册资源和工具。
______________________________________________________________________
🦜 入门指南
先决条件
安装
通过pip安装
克隆存储库并安装依赖项:
git clone https://github.com/Levis0045/ntealan-apis-mcp-server.git
cd ntealan-apis-mcp-server
pip install .(可选)安装和使用 紫外线 实现更快的依赖关系管理
如果你想要更快的安装和现代Python打包,你可以使用 紫外线 在 ntealan-apis-mcp-server 目录:
uv sync运行服务器
要启动MCP服务器,请执行以下操作:
python -m ntealanmcp -t stdio或者,如果你有 紫外线 安装后,您可以运行服务器命令:
ntealanmcp -t stdio服务器将使用 Server-Sent Events (sse) 此端点的默认传输 http://127.0.0.1:8000/sse。您可以在中修改传输 main.py 如果需要的话。
______________________________________________________________________
🦜 项目结构
ntealan-api/
├── src/
│ └── ntealan_apis_mcp/
│ ├── main.py
│ ├── models/
│ │ ├── article.py
│ │ ├── contribution.py
│ │ ├── dictionary.py
│ │ └── common.py
│ ├── primitives/
│ | ├── resources/
│ │ │ ├── article.py
│ │ │ ├── contribution.py
│ │ │ └── dictionary.py
│ | └── tools/
│ | ├── article.py
│ | ├── contribution.py
│ | └── dictionary.py
│ └── common/
│ ├── utils.py
│ ├── cache.py
│ └── http_session.py
├── examples/
├── tests/
├── pyproject.toml
└── requirements.txt______________________________________________________________________
🦜 用法
原始资源
资源是异步函数,用于公开字典、文章和贡献的NTeAlanneneneba API端点的公共数据。它们在MCP服务器上注册,可以通过其自定义URI调用。
资源注册示例:
ntl_mcp_server.add_resource_fn(
lambda dictionary_id, article_id, params: get_article_by_id(
dictionary_id, article_id, params, ntl_mcp_server.get_context()
),
name="get_article_by_id",
uri="ntealan-apis://articles/dictionary/{dictionary_id}/{article_id}?{params}",
tags=["article-endpoint", "mcp-resource"],
mime_type="application/json",
description="Get an article by ID"
)
# or just use the classic integration
@ntl_mcp_server.resource(
uri="ntealan-apis://articles/dictionary/{dictionary_id}/{article_id}?{params}",
tags=["article-endpoint", "mcp-resource"],
mime_type="application/json"
)
async def get_article_by_id(
dictionary_id: str, article_id: UUID,
params: str, ctx: Context
) -> McpResourceResponse:
"""
Retrieve a article by its unique identifier.
"""
# Placeholder logic
return {"status": "OK", "data": f"Hello, {article_id}!"}
现有资源和状态列表:
| 名称/URI模式 | 描述 | 参数 | 开发状态 |
|---|---|---|---|
ntealan-apis://dictionaries/dictionary/{dictionary_id} | 按ID获取字典元数据 | dictionary_id | 稳定 |
ntealan-apis://dictionaries?limit=2 | 获取所有字典元数据 | limit | 稳定 |
ntealan-apis://dictionaries/statistics/{dictionary_id} | 获取特定词典的统计信息 | dictionary_id | 稳定 |
ntealan-apis://dictionaries/statistics | 获取所有词典的统计信息 | 无 | 稳定 |
ntealan-apis://articles/dictionary/{dictionary_id}/{article_id}?none | 按ID获取文章 | dictionary_id, article_id | 稳定 |
ntealan-apis://articles?limit=2 | 获取所有文章 | limit | 稳定 |
ntealan-apis://articles/dictionary/{dictionary_id}?limit=2 | 获取词典中的所有文章 | dictionary_id, limit | 稳定 |
ntealan-apis://articles/statistics/{dictionary_id} | 获取词典的文章统计信息 | dictionary_id | 稳定 |
ntealan-apis://articles/statistics | 获取所有文章的统计信息 | 无 | 不稳定 |
ntealan-apis://contributions/{dictionary_id}/{contribution_id} | 按ID获取捐款 | dictionary_id, contribution_id | 稳定 |
ntealan-apis://greeting/Elvis | 问候资源 | name | 稳定 |
ntealan-apis://articles/dictionaries/search/{dictionary_id}?q=mba&page=1&limit=1 | 在词典中搜索文章 | dictionary_id, q, page, limit | 稳定 |
ntealan-apis://articles/search?q=mba&page=1 | 搜索文章 | q, page | 稳定 |
ntealan-apis://dictionaries/search?q=yemb&page=1&limit=1 | 搜索词典 | q, page, limit | 稳定 |
原始工具
工具是用于创建、更新和删除词典、文章和贡献的实用函数。
工具注册示例:
ntl_mcp_server.add_tool(
create_dictionary,
description="Create a new dictionary",
tags=["mcp-tool", "dictionary-endpoint"]
)现有工具和状态列表(尚未实施):
| 工具名称 | 描述 | 必填有效载荷字段 | 开发状态 |
|---|---|---|---|
create_dictionary | 创建新词典 | data (字典字段) | 未启动 |
update_dictionary | 更新现有词典 | dictionary_id, data (要更新的字段) | 未开始 |
delete_dictionary | 删除词典 | dictionary_id | 未启动 |
create_article | 创建新文章 | dictionary_id, data (文章字段) | 未开始 |
update_article | 更新文章 | dictionary_id, article_id, data (要更新的字段) | 未开始 |
delete_article | 删除文章 | dictionary_id, article_id | 未启动 |
create_contribution | 创建新的贡献 | dictionary_id, article_id, data (贡献字段) | 未开始 |
update_contribution | 更新贡献 | dictionary_id, article_id, contribution_id, data | 未启动 |
delete_contribution | 删除贡献 | dictionary_id, article_id, contribution_id | 未启动 |
运行示例
检查 examples/ 用于运行和测试一些示例的文件夹。
# for all resources
uv run examples/run_client_resources.py -t sse -e prod -s 8
# for all tools
uv run examples/run_client_tools.py -t stdio -e local -s 0您可以获取以下文档:
# for all resources
uv run examples/run_client_resources.py -h
# for all tools
uv run examples/run_client_tools.py -h使用Docker部署
您可以使用Docker部署MCP服务器,并在Nginx反向代理后面为生产环境提供服务。
1.构建Docker镜像
手动构建Docker镜像:
docker build -t ntealan-mcp-server .2.或自动构建并启动服务
- 获取并检查compose和Docker的最新版本。你会得到回应
Docker Compose version v2.35.1.
docker compose version- 构建并启动服务
docker compose up --build -d- 您的MCP服务器现在可以通过此地址访问
http://0.0.0.0:8000或您配置的域。
- 与MCP客户端连接
http://127.0.0.1:8000/sse或您配置的域。
联系Smithery
- 安装mcp-cli
uv add "mcp[cli]"- 与MCP客户端连接
import mcp
from mcp.client.websocket import websocket_client
import json
import base64
smithery_api_key = "your-api-key"
url = f"wss://server.smithery.ai/@Levis0045/ntealan-apis-mcp-server/ws?api_key={smithery_api_key}"
async def main():
# Connect to the server using websocket client
async with websocket_client(url) as streams:
async with mcp.ClientSession(*streams) as session:
# Initialize the connection
await session.initialize()
# List available tools
tools_result = await session.list_tools()
print(f"Available tools: {', '.join([t.name for t in tools_result.tools])}")
# Example of calling a tool:
# result = await session.call_tool("tool-name", arguments={"arg1": "value"})
if __name__ == "__main__":
import asyncio
asyncio.run(main())______________________________________________________________________
🦜 贡献
在此文件中获取更多信息: 贡献.md
🦜 联系
- 专案管理:埃尔维斯·姆邦@NTeALan
- NTeALan API文档: https://apis.ntealan.net/ntealan
- GitHub问题:
- 电子邮件: contact@ntealan.org
