senmcp
一个开源的塞内加尔公民MCP堆栈:用于公共数据和公民服务的MCP服务器,具有LangChain/LangGraph代理、来源和设计安全性。
快速入门
- 安装依赖项(本地,使用
uv):
uv sync- 运行棉绒、类型检查和测试:
make lint
make typecheck
make test- 通过CLI列出MCP工具:
uv run sencivic tools-list- 调用特定工具:
uv run sencivic call opendata search_dataset -p query='"population dakar"' -p limit=5- 使用两个MCP服务器开始交互式聊天:
uv run sencivic chat --servers opendata,services- 在Docker中运行所有内容:
docker compose up --build这将开始:
mcp_opendataHTTP MCP服务器(公开于localhost:8000)mcp_servicesHTTP MCP服务器(公开于localhost:8001)agent_app集装箱运行sencivic为HTTP传输配置的聊天代理
ANSD直播模式
开放数据MCP服务器(mcp_opendata)可以将离线JSON目录与来自以下来源的实时数据相结合:
- ANSD主门户(
ansd.sn)数据库、出版物和指标。 - ANSD农业数据公司(
agridata.ansd.sn)农业数据集。
配置
关键环境变量(参见 .env.example):
ALLOWLIST_DOMAINS:出站HTTP请求允许的域的逗号分隔列表。\
ANSD实时模式的默认值: ansd.sn,agridata.ansd.sn.
HTTP_RATE_LIMIT_PER_HOST:每台主机每秒最大HTTP请求数(默认值1.0).HTTP_CACHE_TTL_SECONDS:HTTP响应的磁盘缓存TTL(秒)(默认值86400).HTTP_TIMEOUT_SECONDS:出站HTTP调用的每个请求超时时间(秒)(默认值10.0).HTTP_MAX_BYTES:从任何HTTP响应体读取的最大字节数(默认值10000000).
中的共享HTTP客户端 mcp_core 强制执行:
- 严格
http/https只有计划。 - 域分配列表+SSRF保护(阻止私有IP范围、本地主机、链接本地)。
- 使用每台主机的速率限制和条件请求
ETag/Last-Modified如果提供。
使用实时数据集
当 ALLOWLIST_DOMAINS 包括 ansd.sn 和 agridata.ansd.sn, search_dataset 将返回:
- ID为的本地/离线条目
local:population_dakar和来源"Local Catalog". - ANSD门户条目的ID如下
ansd:web:或ansd:pub:和来源"ANSD Portal". - ANSD AgriData CKAN条目的ID如下 `ckan:agridata:
: 和来源 "ANSD AgriData (CKAN)"`.
get_series 和 download_table 接受这些ID并返回表 citations[] 其中包括:
title,url,accessed_at(ISO8601)。- 要么短
snippet(标题+第一行,\<=300个字符)或file_hash(下载内容的SHA-256)。
