RapidAPI MCP Server
以下是将 RapidAPI Global Patent API 集成到 MCP 服务器并使用 SQLite 存储的实现方案: **标题:基于 RapidAPI Global Patent API 的 MCP 服务器实现,并使用 SQLite 存储** **概述:** 本方案描述了如何构建一个 MCP (Minimal Control Protocol) 服务器,该服务器利用 RapidAPI 的 Global Patent API 来检索专利数据,并将检索到的数据存储在 SQLite 数据库中。 该服务器将接收来自客户端的请求,调用 RapidAPI 的 Global Patent API,解析响应,并将结果存储到 SQLite 数据库中。 **组件:** * **MCP 服务器:** 负责监听客户端请求,处理请求,调用 RapidAPI,并将结果返回给客户端。 * **RapidAPI Global Patent API:** 提供专利数据检索服务。 * **SQLite 数据库:** 用于存储检索到的专利数据。 * **客户端:** 发送请求到 MCP 服务器,并接收响应。 **技术栈:** * **编程语言:** Python (推荐,易于使用,拥有丰富的库) * **MCP 框架:** 可以使用现有的 MCP 框架,或者自行实现简单的 MCP 协议处理。 * **RapidAPI 客户端库:** 可以使用 `requests` 库或其他 HTTP 客户端库来调用 RapidAPI。 * **SQLite 数据库库:** `sqlite3` (Python 内置) **实现步骤:** 1. **环境搭建:** * 安装 Python。 * 安装必要的 Python 库:`pip install requests` * 安装 SQLite (通常操作系统自带)。 2. **RapidAPI 密钥获取:** * 在 RapidAPI 注册并订阅 Global Patent API。 * 获取 API 密钥 (通常在 RapidAPI 控制面板中)。 3. **SQLite 数据库设计:** * 设计数据库表结构,用于存储专利数据。 例如: * `patents` 表: * `id` (INTEGER PRIMARY KEY AUTOINCREMENT) * `patent_number` (TEXT UNIQUE) * `title` (TEXT) * `abstract` (TEXT) * `inventors` (TEXT) * `assignees` (TEXT) * `filing_date` (TEXT) * `publication_date` (TEXT) * `raw_data` (TEXT) (存储完整的 API 响应,方便后续处理) * `created_at` (TIMESTAMP DEFAULT CURRENT_TIMESTAMP) * 创建数据库和表。 4. **MCP 服务器实现:** * **监听端口:** 服务器监听指定的端口,等待客户端连接。 * **接收请求:** 接收客户端发送的 MCP 请求。 * **解析请求:** 解析 MCP 请求,提取请求参数 (例如,搜索关键词,专利号等)。 * **调用 RapidAPI:** 使用 RapidAPI 密钥和请求参数,调用 Global Patent API。 * **解析响应:** 解析 RapidAPI 返回的 JSON 响应。 * **存储数据到 SQLite:** 将解析后的专利数据存储到 SQLite 数据库中。 * **返回响应:** 将结果 (例如,成功/失败,专利 ID 等) 封装成 MCP 响应,返回给客户端。 5. **客户端实现 (可选):** * 编写客户端程序,用于发送 MCP 请求到服务器,并接收响应。 **代码示例 (Python):** ```python import sqlite3 import requests import json # RapidAPI 配置 RAPIDAPI_KEY = "YOUR_RAPIDAPI_KEY" # 替换为你的 RapidAPI 密钥 RAPIDAPI_HOST = "global-patent.p.rapidapi.com" RAPIDAPI_ENDPOINT = "/patents/search" # SQLite 数据库配置 DATABASE_FILE = "patents.db" def create_table(): conn = sqlite3.connect(DATABASE_FILE) cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS patents ( id INTEGER PRIMARY KEY AUTOINCREMENT, patent_number TEXT UNIQUE, title TEXT, abstract TEXT, inventors TEXT, assignees TEXT, filing_date TEXT, publication_date TEXT, raw_data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) conn.commit() conn.close() def search_patents(query): url = f"https://{RAPIDAPI_HOST}{RAPIDAPI_ENDPOINT}" headers = { "X-RapidAPI-Key": RAPIDAPI_KEY, "X-RapidAPI-Host": RAPIDAPI_HOST } querystring = {"q": query} response = requests.get(url, headers=headers, params=querystring) if response.status_code == 200: return response.json() else: print(f"Error: {response.status_code} - {response.text}") return None def store_patent_data(patent_data): conn = sqlite3.connect(DATABASE_FILE) cursor = conn.cursor() try: patent_number = patent_data.get("patent_number") title = patent_data.get("title") abstract = patent_data.get("abstract") inventors = ", ".join(patent_data.get("inventors", [])) assignees = ", ".join(patent_data.get("assignees", [])) filing_date = patent_data.get("filing_date") publication_date = patent_data.get("publication_date") raw_data = json.dumps(patent_data) cursor.execute(""" INSERT INTO patents (patent_number, title, abstract, inventors, assignees, filing_date, publication_date, raw_data) VALUES (?, ?, ?, ?, ?, ?, ?, ?) """, (patent_number, title, abstract, inventors, assignees, filing_date, publication_date, raw_data)) conn.commit() print(f"Patent {patent_number} stored successfully.") except sqlite3.IntegrityError: print(f"Patent {patent_number} already exists in the database.") except Exception as e: print(f"Error storing patent data: {e}") conn.rollback() finally: conn.close() # 示例 MCP 服务器 (简化版) def handle_mcp_request(request): # 假设请求格式为 "SEARCH:关键词" if request.startswith("SEARCH:"): query = request[7:] print(f"Searching for: {query}") patent_results = search_patents(query) if patent_results and patent_results.get("results"): for patent in patent_results["results"]: store_patent_data(patent) return "SEARCH_SUCCESS" else: return "SEARCH_FAILED" else: return "INVALID_REQUEST" # 主程序 if __name__ == "__main__": create_table() # 创建数据库表 # 模拟 MCP 请求 mcp_request = "SEARCH:artificial intelligence" response = handle_mcp_request(mcp_request) print(f"MCP Response: {response}") mcp_request = "SEARCH:blockchain technology" response = handle_mcp_request(mcp_request) print(f"MCP Response: {response}") print("Done.") ``` **关键点:** * **错误处理:** 在调用 RapidAPI 和操作 SQLite 数据库时,需要进行充分的错误处理,例如处理网络错误,API 错误,数据库错误等。 * **数据清洗:** RapidAPI 返回的数据可能需要进行清洗和转换,才能更好地存储到数据库中。 * **并发处理:** 如果服务器需要处理大量的并发请求,需要考虑使用多线程或异步编程来提高性能。 * **安全性:** 保护 RapidAPI 密钥,避免泄露。 对客户端请求进行验证,防止恶意请求。 * **MCP 协议:** 根据实际需求,定义合适的 MCP 协议,包括请求格式,响应格式,错误码等。 * **分页处理:** 如果 RapidAPI 返回的结果集很大,需要进行分页处理,避免一次性加载所有数据。 * **速率限制:** 注意 RapidAPI 的速率限制,避免超过限制导致请求失败。 可以实现速率限制机制,例如使用令牌桶算法。 * **数据更新:** 可以定期更新数据库中的专利数据,以保持数据的最新性。 **改进方向:** * **使用更完善的 MCP 框架:** 例如 Twisted, asyncio 等。 * **添加缓存机制:** 使用 Redis 或 Memcached 等缓存数据库,缓存常用的查询结果,提高响应速度。 * **实现更复杂的搜索功能:** 例如,支持按发明人,申请人,申请日期等进行搜索。 * **提供 API 接口:** 将 MCP 服务器封装成 RESTful API,方便其他应用程序调用。 * **使用 ORM:** 使用 SQLAlchemy 等 ORM 框架,简化数据库操作。 **总结:** 本方案提供了一个将 RapidAPI Global Patent API 集成到 MCP 服务器并使用 SQLite 存储的基本框架。 您可以根据实际需求,对该方案进行修改和扩展,以满足您的特定需求。 请务必替换 `YOUR_RAPIDAPI_KEY` 为您自己的 RapidAPI 密钥。 这个示例代码只是一个起点,你需要根据你的具体需求进行修改和完善。
myownipgit
README
RapidAPI MCP 服务器
本仓库包含一个 MCP 服务器的实现,用于与 RapidAPI Global Patent API 交互并将专利数据存储在 SQLite 数据库中。
功能
- RapidAPI Global Patent API 集成
- MCP 服务器实现,用于处理专利请求
- SQLite 数据库集成,用于专利数据存储
- 高级专利评分系统 (pscore, cscore, lscore, tscore)
- 速率限制和错误处理
安装
使用 Conda (推荐)
- 克隆仓库:
git clone https://github.com/myownipgit/RapidAPI-MCP.git
cd RapidAPI-MCP
- 创建并激活 conda 环境:
# 从 yml 文件创建环境
conda env create -f environment.yml
# 激活环境
conda activate rapidapi-mcp
或者,您可以手动创建环境:
# 使用 Python 3.11 创建新环境
conda create -n rapidapi-mcp python=3.11
# 激活环境
conda activate rapidapi-mcp
# 安装所需的包
conda install -c conda-forge requests aiohttp python-dotenv pytest
pip install rapidapi-connect
- 设置环境变量:
cp .env.example .env
# 使用您的设置编辑 .env
使用
- 初始化 MCP 服务器:
from patent_mcp.server import MCPPatentServer
mcp_server = MCPPatentServer()
- 处理专利搜索请求:
search_request = {
'command': 'search',
'params': {
'query': 'quantum computing',
'date_range': '2004-2024',
'page': 1,
'per_page': 100
}
}
results = await mcp_server.handle_patent_request(search_request)
测试
要运行测试,请激活您的 conda 环境并运行:
# 运行连接测试
python tests/test_connection.py
# 使用 pytest 运行所有测试
python -m pytest tests/
项目结构
patent_mcp/- 主包目录client.py- RapidAPI 客户端实现server.py- MCP 服务器实现database.py- SQLite 数据库操作scoring.py- 专利评分系统__init__.py- 包初始化
docs/- 文档SCORING.md- 详细的评分方法
examples/- 示例脚本tests/- 单元测试
要求
- Python 3.11 或更高版本
- 所需的包在
environment.yml中列出
评分系统
该系统实现了一个全面的专利评分方法:
- 专利得分 (pscore): 总体专利强度
- 引用得分 (cscore): 引用影响分析
- 法律得分 (lscore): 法律状态评估
- 技术得分 (tscore): 技术复杂性评估
有关详细信息,请参见 SCORING.md。
配置
服务器使用以下环境变量:
RAPIDAPI_KEY: 您的 RapidAPI API 密钥DB_PATH: SQLite 数据库的路径 (可选,默认为./patents.db).env中的其他配置选项
速率限制
RapidAPI 服务具有以下限制:
- 每天 1000 个请求
- 500000 硬性限制
贡献
欢迎贡献! 请随时提交 Pull Request。
许可证
MIT 许可证 - 有关详细信息,请参见 LICENSE 文件
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。
mixpanel
连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。
Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。
Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。