议会MCP服务器大致映射到 https://developer.parliament.uk/ 的一个子集,同时还提供额外的语义搜索功能。
你需要准备以下环境:
通过复制项目根目录下的 .env.example 文件来创建一个 .env 文件,并替换其中必要的变量。
在配置好 .env 文件后,运行以下命令,一次性完成MCP服务器和Elasticsearch数据库的设置,并加载2025年6月的一些示例数据:
make dev_setup_from_scratch
运行上述命令后,你可以使用以下配置连接到MCP服务器:
# 将此配置添加到你的Claude Desktop配置文件中,或其他MCP客户端配置文件中:
# 在macOS系统中,Claude Desktop配置文件位于 `~/Library/Application\ Support/Claude/claude_desktop_config.json`
{
"mcpServers": {
"parliament-mcp": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8080/mcp/", "--allow-http", "--debug"]
}
}
}
MCP服务器提供了11种工具,以辅助议会研究工作:
search_constituency - 按名称搜索选区,或通过ID获取选区的详细信息get_election_results - 获取选区或特定议员的选举结果search_members - 通过多种标准搜索下议院或上议院议员get_detailed_member_information - 获取议员的全面信息,包括传记、联系方式、利益关系和投票记录get_state_of_the_parties - 获取特定日期下某一议院的政党状况get_government_posts - 获取所有政府职位及其现任官员的详尽列表get_opposition_posts - 获取所有反对党职位及其现任官员的详尽列表get_departments - 获取政府部门的参考数据search_parliamentary_questions - 按主题、日期、政党或议员搜索议会书面问题(PQs)search_debates - 通过搜索辩论标题来查找相关辩论search_contributions - 在Hansard议会记录中搜索辩论期间的实际发言内容系统支持两种连接到Elasticsearch的方法:
ELASTICSEARCH_HOST、ELASTICSEARCH_PORT 和 ELASTICSEARCH_SCHEMEELASTICSEARCH_CLOUD_ID 和 ELASTICSEARCH_API_KEY(自动配置主机、端口和协议)# 克隆仓库
git clone git@github.com:i-dot-ai/parliament-mcp.git
cd parliament-mcp
# 设置环境并完成.env文件
cp .env.example .env
nano .env
# 启动Elasticsearch和MCP服务器
docker-compose up --build
服务将在以下地址可用:
http://localhost:8080/mcp/http://localhost:9200# 初始化Elasticsearch
docker compose exec mcp-server uv run parliament-mcp --log-level INFO init-elasticsearch
# 加载2025年6月23日至2025年6月27日的Hansard数据
docker compose exec mcp-server uv run parliament-mcp load-data hansard --from-date 2025-06-23 --to-date 2025-06-27
# 加载2025年6月23日至2025年6月27日的议会问题
docker compose exec mcp-server uv run parliament-mcp --log-level WARNING load-data parliamentary-questions --from-date 2025-06-23 --to-date 2025-06-27
npm install -g mcp-remote
将以下内容添加到你的Claude Desktop配置文件中:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.json{
"mcpServers": {
"parliament-mcp": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp/",
"--allow-http",
"--debug"
]
}
}
}
你也可以自动生成此配置:
make mcp_claude_config
此时Claude应该可以访问议会MCP工具了。
连接到Claude后,你可以使用自然语言进行查询,例如:
查看服务器日志:
docker-compose logs mcp-server
在Claude配置中启用调试模式:添加 --debug 标志。
检查Elasticsearch状态:
curl http://localhost:9200/_cat/health?v
# 或者使用make命令:
make es_health
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone
cd parliament-mcp
# 使用uv安装依赖
uv sync --extra dev
make install # 安装所有依赖
make test # 运行测试
make test_integration # 运行集成测试(首次运行较慢)
make lint # 检查代码格式
make format # 格式化并修复代码
make safe # 运行安全检查
# 预提交钩子
make pre-commit-install # 安装预提交钩子
make pre-commit # 在所有文件上运行预提交检查
# Docker操作
make run # 使用Docker Compose启动服务
make stop # 停止Docker服务
make logs # 查看MCP服务器日志
# 开发辅助工具
make mcp_test # 测试MCP服务器连接
make es_health # 检查Elasticsearch健康状态
make run_mcp_server
# 或者直接使用uv运行:
uv run parliament-mcp serve
parliament-mcp/
├── parliament_mcp/ # 主要Python包
│ ├── cli.py # 命令行接口
│ ├── models.py # 数据模型
│ ├── mcp_server/ # MCP服务器实现
│ │ ├── api.py # API端点和工具定义
│ │ ├── handlers.py # Elasticsearch查询处理程序
│ │ ├── main.py # FastAPI应用程序设置
│ │ └── utils.py # 实用函数
│ └── ... # 其他模块
├── tests/ # 测试套件
│ ├── mcp_server/ # MCP服务器测试
│ └── ... # 其他测试
├── Dockerfile.mcp-server # MCP服务器容器配置
├── docker-compose.yaml # 服务编排
└── README.md # 本文件
项目包含一个统一的命令行工具,用于数据管理和服务器操作:
# 初始化Elasticsearch索引和推理端点
parliament-mcp init-elasticsearch
# 运行MCP服务器
parliament-mcp serve
# 灵活解析日期并加载数据
parliament-mcp load-data hansard --from-date "3 days ago" --to-date "today"
parliament-mcp load-data parliamentary-questions --from-date "2025-01-01"
# 删除所有数据
parliament-mcp delete-elasticsearch
系统处理两种主要类型的议会文档:
parliamentary_questions):
hansard_contributions):
数据会自动从官方议会API加载,无需手动创建文档。
为了使Elasticsearch中的数据保持最新,提供了每日摄取机制。该机制会加载 hansard 和 parliamentary-questions 两个数据源过去两天的数据。
手动运行每日摄取任务:
make ingest_daily
这等同于运行以下命令:
parliament-mcp load-data hansard --from-date "2 days ago" --to-date "today"
parliament-mcp load-data parliamentary-questions --from-date "2 days ago" --to-date "today"
若要实现自动每日摄取,你可以使用cron作业。以下是标准cron和AWS EventBridge cron的示例:
标准Cron 此cron作业将在每天凌晨4点运行:
0 4 * * * cd /path/to/parliament-mcp && make ingest_daily
AWS EventBridge Cron 此AWS EventBridge cron表达式将在每天凌晨4点UTC运行:
cron(0 4 * * ? *)
提供了一个基于Docker的AWS Lambda镜像,用于运行每日摄取任务。
Makefile 目标构建Docker镜像:make docker_build_lambda
这将创建一个名为 parliament-mcp-lambda:latest 的Docker镜像。
2. 在本地测试Lambda
你可以使用AWS Lambda运行时接口模拟器(RIE)在本地测试Lambda函数,该模拟器已包含在基础镜像中。
先决条件:
docker compose up -d elasticsearch)。make docker_build_lambda)。
运行容器:
一种方便的提供必要环境变量的方法是使用 --env-file 标志和你的 .env 文件。你仍然需要覆盖 ELASTICSEARCH_HOST,以确保容器可以连接到本地运行的服务。docker run --rm -p 9000:8080 \
--env-file .env \
-e ELASTICSEARCH_HOST="host.docker.internal" \
parliament-mcp-lambda:latest
触发函数:
打开一个新的终端,运行以下 curl 命令发送测试调用。from_date 和 to_date 参数是可选的。如果未提供,默认将加载过去两天的所有数据。
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"from_date": "2025-06-23", "to_date": "2025-06-27"}'
ELASTICSEARCH_HOST、ELASTICSEARCH_PORT 和 ELASTICSEARCH_SCHEME 指向你的Elasticsearch集群cron(0 4 * * ? *)/{MCP_ROOT_PATH}/mcp,而不是 /MCP_ROOT_PATH.env 文件中的Azure OpenAI凭证--ll DEBUG 标志进行详细日志记录parliament-mcp init-elasticsearch本项目采用MIT许可证,详情请参阅 LICENSE 文件。
欢迎贡献代码!有关如何开始的详细信息,请参阅我们的 贡献指南。