MCP服务器中的data.gov.in
   ](Dockerfile)
A. 生产准备就绪 用于访问印度政府公开数据的模型上下文协议(MCP)服务器 data.gov.in该服务器使人工智能代理和应用程序能够从印度国家数据门户无缝查询、过滤和检索数据集。
特性
| 功能 | 描述 | 状态 |
|---|---|---|
| 数据集检索 | 使用资源ID访问数据集 | ✅ 准备好了 |
| 分页 | 高效导航大型数据集 | ✅ 准备好了 |
| 筛选 | 按字段值筛选数据 | ✅ 准备好了 |
| 字段架构 | 获取数据集结构和字段类型 | ✅ 准备好了 |
| 响应缓存 | 带TTL的LRU缓存以提高性能 | ✅ 准备好了 |
| 速率限制 | 带回退的自动速率限制 | ✅ 准备好了 |
| 错误处理 | 全面的错误处理和重试 | ✅ 准备好了 |
| 日志记录 | 用于监控的结构化日志记录 | ✅ 准备好了 |
| 类型安全 | 完整的类型提示 | ✅ 准备好了 |
| 测试覆盖率 | 综合测试套件 | ✅ 准备好了 |
| Docker支持 | 生产就绪的容器化 | ✅ 准备好了 |
目录
安装
先决条件
- Python 3.12或更高版本
uv包管理器(推荐)或pip- data.gov.in API密钥(在这里买一个)
使用紫外线(推荐)
# Clone the repository
git clone https://github.com/Yash-Kavaiya/data-gov-in-mcp.git
cd data-gov-in-mcp
# Install dependencies
uv sync
# Set up your API key
export DATA_GOV_IN_API_KEY="your-api-key-here"使用pip
# Clone the repository
git clone https://github.com/Yash-Kavaiya/data-gov-in-mcp.git
cd data-gov-in-mcp
# Install dependencies
pip install -e .
# Set up your API key
export DATA_GOV_IN_API_KEY="your-api-key-here"使用Docker
docker build -t data-gov-in-mcp .
docker run -e DATA_GOV_IN_API_KEY="your-api-key" data-gov-in-mcp快速开始
运行服务器
# Set your API key
export DATA_GOV_IN_API_KEY="your-api-key-here"
# Run the server
python main.pyMCP检验员测试
npx @modelcontextprotocol/inspector python main.py配置
可以使用环境变量配置服务器:
| 变量 | 描述 | 默认值 | 必填 |
|---|---|---|---|
DATA_GOV_IN_API_KEY | 您的data.gov.in API密钥 | 无 | ✅ 是的 |
DATA_GOV_IN_BASE_URL | API基本URL | https://api.data.gov.in | 没有 |
DATA_GOV_IN_TIMEOUT | 请求超时(秒) | 30 | 没有 |
DATA_GOV_IN_CACHE_ENABLED | 启用响应缓存 | true | 没有 |
DATA_GOV_IN_CACHE_TTL | 缓存TTL(秒) | 3600 | 没有 |
DATA_GOV_IN_CACHE_MAX_SIZE | 最大缓存条目数 | 1000 | 没有 |
DATA_GOV_IN_RATE_LIMIT_CALLS | 每个时段的最大通话次数 | 100 | 没有 |
DATA_GOV_IN_RATE_LIMIT_PERIOD | 速率限制期(秒) | 60 | 没有 |
DATA_GOV_IN_MAX_RETRIES | 最大重试次数 | 3 | 没有 |
DATA_GOV_IN_RETRY_DELAY | 初始重试延迟(秒) | 1.0 | 没有 |
DATA_GOV_IN_LOG_LEVEL | 日志记录级别 | INFO | 没有 |
DATA_GOV_IN_DEFAULT_LIMIT | 每个请求的默认记录 | 10 | 没有 |
DATA_GOV_IN_MAX_LIMIT | 每个请求的最大记录数 | 100 | 没有 |
示例.env文件
创建一个 .env 项目根目录中的文件:
DATA_GOV_IN_API_KEY=your-api-key-here
DATA_GOV_IN_CACHE_ENABLED=true
DATA_GOV_IN_LOG_LEVEL=INFO
DATA_GOV_IN_TIMEOUT=30可用工具
服务器提供以下MCP工具:
1.获取数据集
从特定数据集/资源中检索数据。
{
"resource_id": "9ef84268-d588-465a-a308-a864a43d0070",
"limit": 10,
"offset": 0,
"filters": "{\"state\": \"Maharashtra\"}"
}2.get_dataset_fields
获取数据集的字段信息和模式。
{
"resource_id": "9ef84268-d588-465a-a308-a864a43d0070"
}3.分页数据集
从数据集中检索特定页面的数据。
{
"resource_id": "9ef84268-d588-465a-a308-a864a43d0070",
"page": 2,
"page_size": 20
}4.获取_数据_摘要
获取数据集的摘要,包括记录计数和字段信息。
{
"resource_id": "9ef84268-d588-465a-a308-a864a43d0070"
}5.过滤器_数据集
按特定字段值筛选数据集记录。
{
"resource_id": "9ef84268-d588-465a-a308-a864a43d0070",
"field": "state",
"value": "Maharashtra",
"limit": 10
}6.获取_统计数据
获取有关API响应缓存的统计信息。
{}7.clear_cache
清除所有缓存的API响应。
{}8.获取服务器信息
获取有关MCP服务器及其配置的信息。
{}用法示例
示例1:检索数据集记录
# Get first 5 records from a dataset
get_dataset(
resource_id="9ef84268-d588-465a-a308-a864a43d0070",
limit=5
)示例2:通过数据进行分页
# Get page 2 with 20 records per page
paginate_dataset(
resource_id="9ef84268-d588-465a-a308-a864a43d0070",
page=2,
page_size=20
)示例3:筛选数据
# Get records where state is Maharashtra
filter_dataset(
resource_id="9ef84268-d588-465a-a308-a864a43d0070",
field="state",
value="Maharashtra",
limit=10
)示例4:检查数据集架构
# Get field definitions
get_dataset_fields(
resource_id="9ef84268-d588-465a-a308-a864a43d0070"
)发展
项目结构
data-gov-in-mcp/
├── src/
│ └── data_gov_in/
│ ├── __init__.py # Package initialization
│ ├── api_client.py # API client implementation
│ ├── cache.py # Caching layer
│ ├── config.py # Configuration management
│ ├── exceptions.py # Custom exceptions
│ └── server.py # MCP server implementation
├── tests/
│ ├── __init__.py
│ ├── test_api_client.py # API client tests
│ ├── test_cache.py # Cache tests
│ └── test_config.py # Configuration tests
├── docs/ # Documentation
├── main.py # Entry point
├── pyproject.toml # Project configuration
├── Dockerfile # Docker configuration
└── README.md # This file设置开发环境
# Clone the repository
git clone https://github.com/Yash-Kavaiya/data-gov-in-mcp.git
cd data-gov-in-mcp
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
uv sync
# Install development dependencies
pip install pytest pytest-cov pytest-asyncio httpx测试
该项目包括对所有组件的全面测试。
运行测试
# Run all tests
pytest
# Run with coverage
pytest --cov=src/data_gov_in --cov-report=html
# Run specific test file
pytest tests/test_api_client.py
# Run with verbose output
pytest -v测试覆盖率
测试套件包括:
- API客户端功能
- 缓存层
- 配置管理
- 错误处理
- 速率限制
- 重试逻辑
Docker部署
塑造形象
docker build -t data-gov-in-mcp:latest .运行容器
docker run -e DATA_GOV_IN_API_KEY="your-api-key" data-gov-in-mcp:latest使用Docker Compose
创建一个 docker-compose.yml:
version: '3.8'
services:
data-gov-in-mcp:
build: .
environment:
- DATA_GOV_IN_API_KEY=${DATA_GOV_IN_API_KEY}
- DATA_GOV_IN_CACHE_ENABLED=true
- DATA_GOV_IN_LOG_LEVEL=INFO
restart: unless-stopped运行方式:
docker-compose up -dAPI文档
API数据.gov.in
该服务器与data.gov.in API接口。关键信息:
- 基本URL:
https://api.data.gov.in - 认证:需要API密钥
- 格式:JSON
- 速率限制:因API关键层而异
获取API密钥
- 访问 data.gov.in
- 注册帐户
- 导航到“我的帐户”
- 生成API密钥
查找资源ID
资源ID可以在data.gov.in网站上找到:
- 浏览数据集https://data.gov.in/catalogs
- 点击数据集
- 在数据集详细信息中查找“API”或“资源ID”
建筑
系统架构
┌─────────────────┐
│ AI Agent │
└────────┬────────┘
│ MCP Protocol
┌────────▼────────┐
│ FastMCP Server │
└────────┬────────┘
│
┌────────▼────────┐
│ API Client │
│ - Rate Limit │
│ - Retry Logic │
│ - Caching │
└────────┬────────┘
│ HTTPS
┌────────▼────────┐
│ data.gov.in │
│ API │
└─────────────────┘关键组件
- FastMCP服务器:公开用于数据集操作的MCP工具
- API客户端:处理对data.gov.in的HTTP请求
- 缓存层:带TTL的LRU缓存以提高性能
- 速率限制器:防止违反API费率限制
- 错误处理程序:全面的错误处理和重试
贡献
欢迎投稿!请遵循以下指南:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
代码的风格
- 遵循PEP 8指南
- 全程使用类型提示
- 为所有公共函数编写文档字符串
- 为新功能添加测试
故障排除
常见问题
问题: APIKeyMissingError
Solution: Set the DATA_GOV_IN_API_KEY environment variable
export DATA_GOV_IN_API_KEY="your-api-key"问题: RateLimitError
Solution: The server automatically handles rate limiting. Wait for the cooldown period or adjust rate limit settings.问题: ResourceNotFoundError
Solution: Verify the resource ID is correct by checking data.gov.in支持
- 问题:
- 电子邮件: yash.kavaiya3@gmail.com
- 文档: 维基
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
- Anthropic 对于模型上下文协议
- FastMCP 优秀的Python框架
- data.gov.in 提供公开的政府数据
- 本项目的所有贡献者和用户
链接
| 资源 | URL |
|---|---|
| data.gov.in门户网站 | https://data.gov.in |
| MCP文件 | https://modelcontextprotocol.io |
| FastMCP | https://github.com/jlowin/fastmcp |
| 项目存储库 | https://github.com/Yash-Kavaiya/data-gov-in-mcp |
______________________________________________________________________
内置❤️ 面向开放数据社区
