项目背景
PanKB是一个全面的泛基因组知识库,包含跨基因、基因组、物种和科的丰富数据集。然而,用户目前只能通过web前端访问预构建的分析,限制了自定义探索访问。
为了解决这个问题,我们开发了一个MCP(模型上下文协议)服务器,将PanKB的实时数据暴露给外部AI客户端。这使得:
- 灵活的数据访问:用户可以连接自己的MCP兼容客户端(Claude Desktop、ChatGPT等)或使用我们在PanKB网站上托管的Streamlit界面。
- 自然语言交互:在LLM的帮助下,用户可以通过简单的语言查询和分析泛基因组数据。
- 实时结果:与PanKB数据库的直接连接确保了最新信息。
MCP系统架构
MCP
Pankb总体架构
Pankb
工具
查询工具
| 工具 | 说明 |
|---|
query_families | 通过物种计数和基因组统计查询微生物科 |
query_species | 搜索具有核心/辅助/稀有基因分布的物种/穿山甲 |
query_genomes | 按物种、国家或隔离源查找基因组 |
query_genes | 按名称、功能、COG类别或泛基因组类搜索基因 |
query_pathways | 按ID或名称搜索KEGG路径 |
query_stats | 获取数据库统计数据(按家庭或国家汇总) |
可视化工具
| 工具 | 说明 |
|---|
plot_gene_frequency_histogram | 一个物种的基因频率U型曲线 |
plot_pangenome_class_distribution | 核心/配件/稀有饼图 |
plot_cog_category_distribution | COG功能类别柱状图 |
plot_species_comparison | 比较一个科中不同物种的穿山甲组组成 |
plot_genome_count_by_family | 按家族或物种分类的基因组计数 |
plot_gc_content_distribution | 一个物种的GC含量直方图 |
plot_geographic_distribution | 按国家分列的基因组地理分布 |
plot_isolation_source_distribution | 隔离源饼图 |
plot_phylogroup_distribution | 系统群分布柱状图 |
plot_pangenome_openness | 开放/封闭穿山甲状态比较 |
plot_phylon_heatmap | Phylon基因组重量热图 |
RAG工具
| 工具 | 说明 |
|---|
search_pangenome_literature | 使用RAG(VoyageAI嵌入+Cohere-reranking)搜索有关微生物泛基因组学的科学文献 |
连接
- https://pankb.org/mcp/(本地主机供开发人员进行测试)
- claude_desktop_config()
路线图
- \[x\] 初始化代码库,使用uv进行env控制,遵循微服务结构将服务器和客户端应用程序分为两个目录,但使用一个仓库跟踪它们
- \[x\] 基于研究论文、设计工具类别编写工具
- \[x\] 重用以前的RAG并添加到工具中
- \[\]设计和编写资源(可选)
- \[x\] 设计和编写提示
- \[x\] 使用FastMCP和uvicorn编写服务器应用程序(以启用热重载进行开发),挂载所有服务器端组件
- \[x\] 编写客户端应用程序,启动客户端实例,导入openai llm,编写用户、客户端、服务器和llm之间的交互循环
- \[x\] 编写streamlit应用程序,创建会话状态以在会话中存储对话,设计欢迎消息以指导使用
- \[x\] 编写dockerfiles来容器化服务器和客户端,编写docker compose来编排
- \[\]为服务器和客户端应用程序添加日志
- \[x\] 添加CI/CD工作流并使用自托管运行器
- \[x\] 设计授权方法、用户客户端(OpenID Connect)、服务器客户端
- \[\]在流媒体首页设计一个面板,显示过去的对话和可用工具
- \[x\] 构建一个SQL数据库来存储用户信息、令牌使用情况和过去的对话
- \[\]向Let's Encrypt申请证书,使用nginx进行反向代理,连接到prod服务器并发布到MCP服务器注册表
- \[x\] 为PNG/SVG和CSV添加导出功能
- \[\]建立监控和警报系统