MCP 服务器
MCP(模型上下文协议)服务器,提供对波兰议会(Sejm)API和欧洲立法标识符(ELI)数据库的全面访问,用于法律文件。
概述
该服务器使人工智能助手和应用程序能够通过标准化的MCP接口与波兰议会数据和法律文件进行交互。它提供有关议员、委员会、投票、质询和完整的波兰法律行为数据库的信息。
特性
🏛️ Sejm API工具
访问波兰众议院的实时议会数据:
- 瑟姆:检索议员名单
- sejm_get_mp_details:获取详细的MP配置文件和统计数据
- 瑟姆各委员会:获取议会委员会信息
- 瑟姆搜索投票:搜索和分析投票记录
- 瑟姆质询:浏览议会问答
⚖️ ELI(欧洲法规标识符)API工具
搜索和检索波兰法律文件:
- eli_search_arts:跨法律行为数据库的高级搜索
- eli_get_act_details:检索全面的行为元数据
- eli_get_act_text:下载完整的法律文本(HTML/PDF格式)
- eli_get_act_references:探索法律文件关系
- eli_get_publishers:列出可用的法律出版商
安装
先决条件
- 转到1.21或更高版本
- Git
快速开始
# Clone the repository
git clone https://github.com/janisz/sejm-mcp.git
cd sejm-mcp
# Build the server
go build -o sejm-mcp ./cmd/sejm-mcp
# Run the server
./sejm-mcp与MCP客户端一起使用
服务器实现了模型上下文协议,可以与任何兼容MCP的客户端(Claude Desktop、VS Code扩展等)集成。
Docker用法(推荐)
使用服务器最简单的方法是使用Docker:
# Pull the latest image
docker pull ghcr.io/janisz/sejm-mcp:latest
# Run the server
docker run --rm -i ghcr.io/janisz/sejm-mcp:latestMCP配置
将此配置添加到您的 .mcp.json 或MCP客户端配置:
{
"servers": {
"sejm-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/janisz/sejm-mcp:latest"
],
"description": "Polish Parliament and Legal Documents API access"
}
}
}Claude桌面配置
对于Claude Desktop,添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"sejm-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"ghcr.io/janisz/sejm-mcp:latest"
]
}
}
}Codex配置
对于Codex,请添加到您的 .codex/config.toml:
[mcp_servers.sejm_mcp]
command = "docker"
args = [ "run", "-i", "--rm", "ghcr.io/janisz/sejm-mcp:latest" ]本地二进制使用
如果您更喜欢在本地构建和运行:
# Build from source
go build -o sejm-mcp ./cmd/sejm-mcp
# Add to your MCP configuration
{
"servers": {
"sejm-mcp": {
"command": "./sejm-mcp",
"description": "Polish Parliament and Legal Documents API access"
}
}
}高级:HTTP和SSE传输
对于高级用例,服务器还支持HTTP和服务器发送事件(SSE)传输方法:
# Run with HTTP transport
./sejm-mcp --transport http --port 8080
# Run with SSE transport
./sejm-mcp --transport sse --port 8080HTTP传输配置:
{
"servers": {
"sejm-mcp": {
"url": "http://localhost:8080/mcp",
"description": "Polish Parliament API via HTTP"
}
}
}SSE传输配置:
{
"servers": {
"sejm-mcp": {
"url": "http://localhost:8080/sse",
"description": "Polish Parliament API via SSE"
}
}
}注: HTTP和SSE传输是高级功能,主要用于web集成或调试。建议大多数MCP客户端使用默认的stdio传输。
工具文档
API 工具
sejm_get_mps
获取特定任期的议员名单。
参数:
term(可选):议会任期编号(1-10,默认值:10)
例子:
{
"tool": "sejm_get_mps",
"arguments": {
"term": "10"
}
}退货: 包含个人详细信息、俱乐部隶属关系、地区信息和活动状态的MP对象数组。
______________________________________________________________________
sejm_get_mp_details
检索特定议员的详细信息。
参数:
term(可选):议会任期(1-10,默认:10)mp_id(必填):MP标识号
例子:
{
"tool": "sejm_get_mp_details",
"arguments": {
"term": "10",
"mp_id": "123"
}
}退货: 全面的议员档案,包括传记、投票统计、委员会成员和联系信息。
______________________________________________________________________
sejm_get_committees
列出特定任期的所有议会委员会。
参数:
term(可选):议会任期(1-10,默认:10)
例子:
{
"tool": "sejm_get_committees",
"arguments": {
"term": "10"
}
}退货: 包含名称、代码、成员、工作范围和联系方式的委员会对象数组。
______________________________________________________________________
sejm_search_votings
使用过滤选项搜索议会投票记录。
参数:
term(可选):议会任期(1-10,默认:10)sitting(可选):具体座位数limit(可选):最大结果(默认值:50)
例子:
{
"tool": "sejm_search_votings",
"arguments": {
"term": "10",
"sitting": "1",
"limit": "25"
}
}退货: 包含日期、主题、投票计数和结果的投票记录数组。
______________________________________________________________________
sejm_get_interpellations
检索议会质询(向政府提出的正式问题)。
参数:
term(可选):议会任期(1-10,默认:10)limit(可选):最大结果(默认值:50)
例子:
{
"tool": "sejm_get_interpellations",
"arguments": {
"term": "10",
"limit": "20"
}
}退货: 一系列质询对象,包括问题、收件人、日期和政府回应。
ELI API工具
eli_search_acts
使用高级过滤功能搜索波兰法律行为数据库。
参数:
title(可选):在动作标题中搜索关键字publisher(可选):出版商代码(例如,《法律杂志》的“DU”)year(可选):出版年份type(可选):文档类型limit(可选):最大结果(默认值:50)
例子:
{
"tool": "eli_search_acts",
"arguments": {
"title": "konstytucja",
"publisher": "DU",
"year": "1997",
"limit": "10"
}
}退货: 包含行动摘要、ELI标识符和发布详细信息的搜索结果。
______________________________________________________________________
eli_get_act_details
获取特定法律行为的全面元数据。
参数:
publisher(必填):出版商代码year(必填):出版年份position(必填):日记账中的职位编号
例子:
{
"tool": "eli_get_act_details",
"arguments": {
"publisher": "DU",
"year": "1997",
"position": "78"
}
}退货: 完整的行为元数据,包括标题、日期、状态、关键字和法律关系。
______________________________________________________________________
eli_get_act_text
下载HTML或PDF格式的法律行为全文。
参数:
publisher(必填):出版商代码year(必填):出版年份position(必填):职位编号format(可选):“html”或“pdf”(默认:html)
例子:
{
"tool": "eli_get_act_text",
"arguments": {
"publisher": "DU",
"year": "1997",
"position": "78",
"format": "html"
}
}退货: 要求格式的完整法律文本,适合分析或显示。
______________________________________________________________________
eli_get_act_references
探索行为之间的法律关系(引用、修订等)。
参数:
publisher(必填):出版商代码year(必填):出版年份position(必填):职位编号
例子:
{
"tool": "eli_get_act_references",
"arguments": {
"publisher": "DU",
"year": "1997",
"position": "78"
}
}退货: 一系列具有关系类型和描述的相关法律文件。
______________________________________________________________________
eli_get_publishers
列出ELI数据库中所有可用的法律文件出版商。
参数: 无
例子:
{
"tool": "eli_get_publishers",
"arguments": {}
}退货: 包含代码、名称和描述的发布者对象数组。
用例
研究与分析
- 政治学:分析投票模式、委员会组成、议员活动
- 法律研究:搜索立法,跟踪法律变化,查找引用的文件
- 新闻业:获取最新的议会程序和法律发展
- 学术的:研究波兰政治制度和法律框架
人工智能集成
- 法律AI:使人工智能助手能够回答有关波兰法律的问题
- 政治聊天机器人:提供有关议员和议会活动的实时信息
- 研究工具:自动化政治和法律分析的数据收集
- 合规体系:监控法律变化和监管更新
数据源
此服务器提供对波兰政府官方API的访问:
- API 会议:https://api.sejm.gov.pl/sejm.html
- 实时议会数据 - 官方议员档案和投票记录 - 委员会时间表和组成
- API艾丽: https://api.sejm.gov.pl/eli_pl.html
- 完整的波兰法律行为数据库 - 欧洲立法标识符合规性 - 全文搜索功能
发展
建筑
服务器使用干净、可维护的架构:
├── cmd/sejm-mcp/ # Main application entry point
├── internal/server/ # MCP server implementation
│ ├── server.go # Core server and HTTP client
│ ├── sejm_tools.go # Sejm API tool implementations
│ └── eli_tools.go # ELI API tool implementations
├── pkg/
│ ├── sejm/ # Auto-generated Sejm API types
│ └── eli/ # Auto-generated ELI API types
├── *-codegen.yaml # OpenAPI code generation configs
├── *.json # OpenAPI specifications (downloaded)
└── README.md类型生成
该项目根据官方OpenAPI规范自动生成Go类型:
# Install required tools
go install github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@latest
# Download latest OpenAPI specs
curl -s https://api.sejm.gov.pl/sejm/openapi/ -o sejm-openapi.json
curl -s https://api.sejm.gov.pl/eli/openapi/ -o eli-openapi.json
# Convert YAML to JSON format
yq eval -j sejm-openapi.json > sejm-openapi-converted.json
yq eval -j eli-openapi.json > eli-openapi-converted.json
# Generate Go types from OpenAPI specs
oapi-codegen -config sejm-codegen.yaml sejm-openapi-converted.json
oapi-codegen -config eli-codegen.yaml eli-openapi-converted.json
# Rebuild the server
go build -o sejm-mcp ./cmd/sejm-mcp贡献
- 分叉存储库
- 创建要素分支
- 确保所有类型都是根据OpenAPI规范生成的
- 添加新功能的测试
- 更新文档
- 提交拉取请求
测试
该项目有一个全面的测试套件,具有不同的测试级别:
# Run all tests (recommended before committing)
make test
# Run unit tests only (fast, no network required)
make test-unit
# Run API connectivity smoke test (quick network check)
make test-smoke
# Run integration tests (requires network access)
make test-integration
# Run with coverage report
make test-coverage
# Check API connectivity manually
make check-apis测试体系结构
- 单元测试:使用模拟数据,离线运行,专注于逻辑验证
- 冒烟测试:验证API可访问性的单个连接测试
- 集成测试:需要真正的API访问的端到端测试
- 模拟服务器:
httptest.NewServer用于受控HTTP测试
演出
- 单元测试:~0.01秒(即时模拟数据)
- 烟雾测试:~0.1秒(快速连接检查)
- 完整测试套件:约6-8s(包括模拟HTTP服务器)
故障排除
常见问题
构建错误:通常由生成类型中的重复字段引起
- 重新运行类型生成:
oapi-codegen -config sejm-codegen.yaml sejm-openapi-converted.json - 检查API规范变更
API费率限制:官方API可能有速率限制
- 如果需要,实施请求限制
- 缓存频繁访问数据的响应
网络超时:对于大型数据集,API响应可能较慢
- 在服务器配置中调整HTTP客户端超时
- 使用分页参数限制响应大小
测试失败:
- 单元测试失败:检查最近的代码更改,单元测试使用模拟数据
- 烟雾测试失败:验证互联网连接,API可能暂时不可用
- 集成测试失败:检查API状态和网络连接
性能提示
- 使用
limit控制响应大小的参数 - 缓存频繁访问的参考数据(委员会、出版商)
- 对重复查询实施请求重复数据删除
许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
致谢
- 波兰议会(瑟姆)提供开放API
- 用于标准化AI工具集成的MCP协议开发人员
- OpenAPI规范标准倡议
