🔭 EOSC数据共享搜索服务器
 ](https://github.com/EOSC-Data-Commons/data-commons-search/pkgs/container/data-commons-search)
服务器 EOSC数据共享项目 MatchMaker服务,提供开放获取数据集的自然语言搜索。它公开了一个HTTP POST端点,并支持 模型上下文协议(MCP) 帮助用户通过大型语言模型辅助搜索发现数据集和工具。
🧩 端点
HTTP API包括2个主要端点:
/mcp: MCP服务器 使用EOSC数据共享OpenSearch服务搜索相关数据以回答用户问题
- 使用流式HTTP传输 - 可用工具: - \[x\] 搜索数据集 - \[x\] 获取数据集中文件的元数据(名称、描述、文件类型) - \[\]搜索工具 - \[\]搜索与数据集或工具相关的引文
/chat: HTTP POST 端点(JSON),用于通过LLM提供程序与MCP服务器工具聊天(部署时通过env变量提供API密钥)
- Streams服务器发送事件(SSE)响应符合 AG-UI协议.
\[!提示\] 它也可以通过pip包用作MCP服务器。
🔌 将客户端连接到MCP服务器
该系统可以使用STDIO或Streamable HTTP传输直接用作MCP服务器。
\[!警告\] 您需要访问预先索引的OpenSearch实例,MCP服务器才能工作。
按照客户的指示,使用 /mcp 已部署服务器的URL(例如。http://localhost:8000/mcp)
向添加新的MCP服务器 VSCode GitHub副本:
- 打开命令选项板(
ctrl+shift+p或cmd+shift+p) - 搜索
MCP: Add Server... - 选择
HTTP,并提供MCP服务器URLhttp://localhost:8000/mcp
您的VSCode mcp.json 应该看起来像:
{
"servers": {
"data-commons-search-http": {
"url": "http://localhost:8000/mcp",
"type": "http"
}
},
"inputs": []
}或者使用STDIO传输:
{
"servers": {
"data-commons-search": {
"type": "stdio",
"command": "uvx",
"args": ["data-commons-search"],
"env": {
"OPENSEARCH_URL": "OPENSEARCH_URL"
}
}
}
}或者使用本地文件夹进行开发:
{
"servers": {
"data-commons-search": {
"type": "stdio",
"cwd": "~/dev/data-commons-search",
"env": {
"OPENSEARCH_URL": "OPENSEARCH_URL"
},
"command": "uv",
"args": ["run", "data-commons-search"]
}
}
}🛠️ 发展
\[!重要\] 要求: - \[x\] uv,轻松处理脚本和虚拟环境 - \[x\] docker,用于部署OpenSearch服务(或仅访问正在运行的实例) - \[x\] LLM提供程序的API密钥: e-infraCZ, Mistral.ai,或 开放路由📥 安装开发依赖项
uv sync --extra agent安装预提交挂钩:
uv run pre-commit install创建一个 keys.env 使用您的LLM提供程序API密钥的文件:
EINFRACZ_API_KEY=YOUR_API_KEY
MISTRAL_API_KEY=YOUR_API_KEY
OPENROUTER_API_KEY=YOUR_API_KEY⚡️ 启动开发服务器
在dev中启动服务器http://localhost:8000,MCP端点位于http://localhost:8000/mcp
uv run uvicorn src.data_commons_search.main:app --log-config logging.yml --reload默认 OPENSEARCH_URL=http://localhost:9200通过环境变量自定义服务器配置:
SERVER_PORT=8001 OPENSEARCH_URL=http://localhost:9200 uv run uvicorn src.data_commons_search.main:app --host 0.0.0.0 --port 8001 --log-config logging.yml --reload\[!提示\] 示例curl请求: ``sh curl -X POST http://localhost:8000/chat \ -H "Content-Type: application/json" -H "Authorization: SECRET_KEY" \ -d '{"messages": [{"role": "user", "content": "Educational datasets from Switzerland covering student assessments, language competencies, and learning outcomes, including experimental or longitudinal studies on pupils or students."}], "model": "einfracz/qwen3-coder"}'`每个支持的提供商的推荐型号: -einfracz/qwen3-coder或einfracz/gpt-oss-120b(更小、更快) -mistralai/mistral-medium-latest(large表示较旧,在工具调用方面不太好) -groq/moonshotai/kimi-k2-instruct-openai/gpt-4.1`
\[!重要\] 要构建前端web应用程序并将其集成到服务器,请从 媒人前端文件夹 运行: ``sh npm run build && rm -rf ../data-commons-search/src/data_commons_search/webapp/ && cp -R dist/spa/ ../data-commons-search/src/data_commons_search/webapp/ ``📦 为生产而建
在中构建二进制文件 dist/
uv build🐳 使用Docker进行部署
创建一个 keys.env 带有API密钥的文件:
EINFRACZ_API_KEY=YOUR_API_KEY
MISTRAL_API_KEY=YOUR_API_KEY
OPENROUTER_API_KEY=YOUR_API_KEY
SEARCH_API_KEY=SECRET_KEY_YOU_CAN_USE_IN_FRONTEND_TO_AVOID_SPAM\[!提示\] SEARCH_API_KEY 可以用于添加一层保护,以防可能向LLM发送垃圾邮件的机器人程序,如果不提供,则查询API将不需要API密钥。您可以使用预构建的docker镜像 ghcr.io/eosc-data-commons/data-commons-search:main
示例 compose.yml:
services:
mcp:
image: ghcr.io/eosc-data-commons/data-commons-search:main
ports:
- "127.0.0.1:8000:8000"
environment:
OPENSEARCH_URL: "http://opensearch:9200"
EINFRACZ_API_KEY: "${EINFRACZ_API_KEY}"构建和部署服务:
docker compose up\[!重要\] 当前部署到临时服务器是在每次推送时通过GitHub Actions自动完成的main支。 当进行推送时,工作流将: - 拉一下main从前端存储库分支 - 构建前端,并将其添加到src/data_commons_search/webapp- 为服务器构建docker镜像 - 将docker镜像发布为main/latest- 然后,登台基础架构会自动拉取latest映像的版本并部署它。
✅ 运行测试
\[!小心\] 您需要首先在端口8001上启动服务器(请参阅启动开发服务器部分)
uv run pytest要在调试时显示所有日志,请执行以下操作:
uv run pytest -s🧹 格式代码和类型检查
uvx ruff format
uvx ruff check --fix
uv run mypy♻️ 重置环境
升级 uv:
uv self update清洁 uv 隐藏物:
uv cache clean🏷️ 释放过程
\[!重要\] 在获取PyPI API令牌 pypi.org/manage/account.
运行提供版本升级的发布脚本: fix, minor,或 major
.github/release.sh fix\[!提示\] 将您的PyPI令牌添加到您的环境中,例如~/.zshrc或~/.bashrc: ``sh export UV_PUBLISH_TOKEN=YOUR_TOKEN``
🤝 致谢
LLM提供者 einfracz 是由e-INFRA CZ提供并由CERIT-SC Masaryk大学运营的服务
计算资源由捷克共和国教育、青年和体育部支持的e-INFRA CZ项目(ID:90254)提供。
