@cyanheads/pubchem-mcp-服务器
通过 MCP 搜索 PubChem 化学数据库,以了解化合物、特性、安全数据、生物活性、交叉参照和实体摘要。 (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
PubChem提供的化学化合物和生物测定. 以名称、公式或结构搜索化合物;获取特性、安全数据、生物活性、药物与食品的相互作用、分子目标和3D结构;并按生物目标找到生物测定.
工具
| 工具 | 说明 |
|---|---|
pubchem_search_compounds | 按名称搜索化合物,SMILES,InChi,InChiKey,公式,子结构,上层结构,或2D相似性,或列出发现活性生物测定的化合物. |
pubchem_get_compound_details | 获得物理化学性质,描述,同义词,药物相同性,由CID对化合物进行分类. |
pubchem_get_compound_image | 用 CID 获取一个化合物的 二维结构图( PNG) . |
pubchem_get_compound_3d_structure | 由 CID 获取一个化合物的3D同位素(原子坐标和债券),如解析的 JSON 或生 SDF . |
pubchem_get_compound_xrefs | 获取外部数据库的交叉引用(PubMed,专利,基因,CAS和EC号码等). |
pubchem_get_compound_safety | 通过CID(批量)获取一个或多个化合物的GHS危险分类和安全数据. |
pubchem_get_bioactivity | 获得化合物的生物活性剖面:实验结果,目标,活性值,实验类型,并引用了PubMed ID;通过结果,分子目标,或实验类型过滤. |
pubchem_get_compound_interactions | 获得一个化合物的药物和食物的相互作用 和分子目标 它的化验名称, 每一个有化验计数 和最强大的活性值. |
pubchem_search_assays | 按生物目标(基因符号,蛋白质,基因ID,UniProt加入)查找生物测定. |
pubchem_get_summary | 得到PubChem实体的总结:化验,基因,蛋白质,分类学. |
资源
复合物和化验记录也作为URI的调制资源被曝光出,并以与工具相同的客户端方法作为后盾;许多MCP客户端都是只使用工具,从不表面资源.
| 资源 | 说明 |
|---|---|
pubchem://compound/{cid} | 核心物理化学性质(JSON). |
pubchem://compound/{cid}/safety | 全球统一制度危险分类. |
pubchem://compound/{cid}/image | 2D结构图 (PNG). |
pubchem://compound/{cid}/xrefs | 出自"外道对照"(JSON). |
pubchem://compound/{cid}/bioactivity | 生物测定活性简介 (JSON). |
pubchem://assay/{aid} | BioAssay摘要(JSON). |
技能
服务器发布代理技能, pubchem-guide,覆盖了门和标识链,工具描述不携带:盐 vs 母 CID,Gene ID和加入来自何处,基因符号,Gene ID,和加入搜索为何不同意,以及如何读取活性标签,强性值,以及GHS数据. 插件安装( Claude Code, Codex) 和 .mcpb 捆起它从 skills/,服务器也可以通过 MCP 作为 skill://pubchem-guide/SKILL.md。 。 。 .
能力参考
pubchem_search_compounds 工具
- 6项搜索战略:标识符(
identifierType+ 键identifiers;名称/MILES/InChi/InChiKey,每通电话25个,其余返回unprocessed),公式(formula,希尔标记,可选allowOtherElements),子结构/上层结构并有2D相似性(query+ 键queryType; 相似性阈值 70-100, 默认为 90), 或分析(aid; 化合物生物测定标记为活性,或每个化合物试验activeOnly: false(中文(简体) ) - 每页最多200 CID( 默认 20; 较大)
maxResults服务于200人,报告于cappedInputs(三);offset页面标识符和测试搜索到匹配的末尾,以及公式、子结构、上层结构和相似性搜索到一万个(深度失败)offset_ceiling_exceeded) (中文(简体) ). 可选properties保存后续pubchem_get_compound_details调用 - 报告
totalFound,或一个totalFoundAtLeast上游搜索饱和时的地板,以及unresolvedIdentifiers没有CID的输入。 失败者aid_not_found用于未知的自动识别码和search_query_rejected查询 PubChem 无法搜索
pubchem_get_compound_details 工具
- 每通电话最多100个刑事调查员(其余人员返回)
unprocessed); 27个可用属性,默认为核心集 14 - 可选说明
descriptionOffset编号 :maxDescriptions,默认 3, 最大 20)和分类(FDA, MeSH, ATC)仅涵盖前10个CID, 其余列于skippedCids. 可选同义词synonymOffset编号 :maxSynonyms,默认为 20,最大为 100 ) 和 Lipinski/Veber 类药物检查覆盖每个发现的 CID - 每份CID数据
found: false从没有数据的化合物中分离一个不存在的 CID
pubchem_get_compound_image 工具
- 单一CID;
size实值"small"(100x100)或 (中文(简体) )"large"(300x300,默认) - 返回基数64编码的PNG+宽度/高
- 类型
cid_not_found当 PubChem 没有 CID 记录时出错
pubchem_get_compound_3d_structure 工具
- 单一CID;
format="json"(默认)返回解析的原子(元素+x/y/z)和债券,format="sdf"返回原始 V2000 SDF 文本 maxAtoms编号 :maxBonds上限 JSON 预览( 默认为 200 个);atomCount编号 :bondCount总是报告全部总数,并通过浓缩披露任何上限includeRawSdf绕过原始 SDF 文本上的默认500行盖- 可选
includeAlternateConformerIds列出默认以外的符合者标识符 - 类型
no_3d_structure当 PubChem 没有计算出3D 坐标( 大分子、 混合物、 一些盐类) 时出错
pubchem_get_compound_xrefs 工具
- 单个 CID; 一个或多个
xrefTypes数字 :CAS, (中文(简体) ),EC, (中文(简体) ),RN, (中文(简体) ),RegistryID, (中文(简体) ),PatentID, (中文(简体) ),PubMedID, (中文(简体) ),GeneID, (中文(简体) ),ProteinGI, (中文(简体) ),TaxonomyID CAS财务报告和审定财务报表EC(a) 存放在大院内的数字,根据存入该大院的多少来源记录所订购的每个明确价值,以及这些数目sourceCounts。 。 。 .RN是 PubChem 的无名登记号码列表: CAS 号码与已过期的和相关的 CAS RN 和 EC 号码相邻ProteinGI目前未返回 PubChem 的数据; 使用GeneID基因/蛋白质协会maxPerType最多500人(违约50人),其中一人offset适用于每类;每类报告totalAvailable财务报告和审定财务报表truncated。 。 。 .PubMedID来得最快- 无法装入的类型命名于
failedTypes而其他人仍然返回;只有当一个类型失败,并且除了蛋白质GI(PubChem不再服务)之外没有其它类型加载时,呼叫才会失败. 空结果表示化合物没有被请求的类型, 或 CID 可能被误打
pubchem_get_compound_safety 工具
- 每通电话最多25个CID(其余返回)
unprocessed(中文(简体) ) - 返回全球统一制度的信号单词、象形图、H码和P码在源头之间合并,加
classifications[](b) 防范性说明载有:decoded旗帜 - 每份CID数据
status数字 :ok, (中文(简体) ),not_classified(通知者没有发现全球统一制度的危险),no_ghs_data(没有交存分类),或cid_not_found,所以一个坏的CID 从来没有读为"没有危险的文件"
pubchem_get_bioactivity 工具
- 单个 CID; 过滤器
outcomeFilter(单位:千美元)active编号 :inactive编号 :all默认值all, (中文(简体) ),targetGeneId编号 :targetAccession,以及assayType(无)confirmatory编号 :screening编号 :summary编号 :other); 分析必须通过每个过滤器集 - 目标过滤器匹配绑同目标的任何标识符,因此Gene ID 5742,UniProt P23219和RefSeq NP 5421158都达到了相同的COX-1测定
- 每一个结果都包含着实验
assayType以及它引用的PubMed身份证(pmids,最新第一页) - 每页最多100个结果(默认20);
offset到达其余。 多目标分析报告匹配的目标,并列出其他目标otherTargets - 报告
totalAssays编号 :activeCount编号 :inactiveCount整个大院和filteredCount编号 :returnedCount对于页面; 通知说是否没有数据, 过滤器排除了一切, 或者offset超过尾端
pubchem_get_compound_interactions 工具
- 单个 CID; 一个或多个
kinds—— 说drug-food(PUG视图),target, (中文(简体) ),drug-drug(毒品银行);默认["drug-food"],并有一个空的毒品-食品页面点target target给每个目标一个条目 化合物的实验摘要名: 加入的 Gene ID 和 它的表对, 或 它从未对过的标识符。 A Gene ID 和一个加入,任何一行对子都是单独的条目,即使它们给同一个蛋白命名(erlotinib的ERBB2出现为:accession:P04626作为GeneID:2064) (中文(简体) ). 每个条目都从一个分批基因或蛋白质汇总检查中命名目标,加上GeneID:或者说accession:价值pubchem_get_bioactivity过滤器上,并按结果说明检验结果和最有力的AID值。 积极目标先来,最强者先来 如果一个名字搜索失败或数秒内没有回答,条目会保留其标识,通知中写着maxEntries每一页的每类(最多50个,默认为10个);offset计数记录(目标target),最高达2,147,483,646. 每个类型页独立,以paging[](单位:千美元)totalRecords编号 :nextOffset编号 :truncated(中文(简体) )- 失败的种类在
failedKinds其他人仍然回来。 通知只为失败提供重试,重试可以澄清(出时,速率限制,网络出错,无法读取的响应,50xx以外的5);HTTP 400,403,或501,或服务器不期望的形状的响应,每通呼叫都以同样的方式失败.drug-drug来源于PubChem的SDQ服务,它拒绝自动请求,因此降落在failedKinds重试也无济于事
pubchem_search_assays 工具
- 搜索者为
targetType数字 :genesymbol编号 :proteinname(案文),geneid(NCBI基因标识),proteinaccession(UniProt) (英语) - A 类
genesymbol跨物种匹配.geneid财务报告和审定财务报表proteinaccession每个针头一个蛋白质,但返回重叠, 不同的测试集; 结合两者为完整的列表 - 每页最多200个助理ID(默认为50);
offset通过结果的页数 - 拒绝空白
targetQuery和非数字geneid页:1targetQueryPubChem 以 HTTP 400 拒绝( 一个带换行符, 另一个除标签和 NUL 以外的 C0 控制字符, 或者 DEL) 失败target_query_rejected - 报告
totalFound并区分“无匹配”和“抵消过末”
pubchem_get_summary 工具
entityType数字 :assay(援助署),gene(NCBI基因标识),protein(统一加入),或taxonomy(税务ID);每个呼叫最多10个识别符- 逗号连接字符串被分割为标识符; 任何过去的前 10 个都会返回到
unprocessed,且超过1000个失败too_many_identifiers - 自动识别码、基因识别码和税务识别码必须是正整数, 最高可达2147483647; 其他部件得到一个
invalid: true行, 调用失败为invalid_identifier只有在无可用时 - 人均标识符
found旗帜; 字段依赖entityType(分类:lineage; 基因 :symbol编号 :taxonomy;说明:method,前25页targets与targetCount,测试/活性化合物计数,lastDataChange(中文(简体) )
pubchem://compound/{cid} 资源
- 核心物理化学性质(默认的14-财产集与
pubchem_get_compound_details),作为application/json - 当 CID 在 PubChem 不存在时, 丢出一个未找到的键盘
- 使用
pubchem_get_compound_details选择特定属性或添加描述、同义词、类似药物和分类
pubchem://compound/{cid}/safety 资源
- 全球统一制度危险分类为:
application/json,包括每个来源ghs.classifications和贡献者source列表 status(单位:千美元)ok编号 :not_classified编号 :no_ghs_data编号 :cid_not_found)是区分坏CID和没有沉积分类的化合物的唯一信号——读取的资源没有通知表面
pubchem://compound/{cid}/image 资源
- 2D 结构图, 300x300 PNG, 以基数64 blob 返回
- 使用
pubchem_get_compound_image100x100大小选项
pubchem://compound/{cid}/xrefs 资源
- 焦点默认集 -
RN, (中文(简体) ),RegistryID, (中文(简体) ),PubMedID, (中文(简体) ),CAS(与sourceCounts——每类最多25个身份证,因为application/json; PubMed ID是最高的25个(最近一次分配),最高的第一. 无法装入的类型命名于failedTypes - 使用
pubchem_get_compound_xrefs用于全套xref型号,每型号上限较高,并抵消呼号
pubchem://compound/{cid}/bioactivity 资源
- 最多25条
application/json,每个带有assayType财务报告和审定财务报表pmids附加时totalAssays编号 :activeCount(a) 整个大院otherTargets - 使用
pubchem_get_bioactivity以结果、目标或化验类型过滤,提高上限,或页以相抵
pubchem://assay/{aid} 资源
- 生物分析摘要
application/json名称、说明、来源、协议、物质计数 - 当 AID 不存在时, 丢出一个未找到的键
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
PubChem 特异性:
- 覆盖 PUG REST 和 PUG 视图终点,加上药物-药物相互作用的SDQ
- 限制费率的客户端( 5 req/s) 有请求排队和一次关于瞬时故障的重试
- 每一次呼叫的50个预算在上游失败,因为
Timeout,且已取消的呼叫失败RequestCancelled - V2000 SDF 为3D 配对者设置的解析器; 类似药物的特性从已比较的属性计算
- 所有工具都是只读和一能的,不需要 API 键
方便代理输出 :
- 每份CID数据
status财务报告和审定财务报表found旗帜允许调用者在数据上的分支而不是匹配出错字符串 - 批量工具同时返回每个项目的结果
unresolvedIdentifiers, (中文(简体) ),skippedCids, (中文(简体) ),failedKinds,以及failedTypes而不是输掉整个电话 - 封面列表披露
truncated, (中文(简体) ),shown编号 :cap,以及nextOffset; 超大批次的服务达到上限cappedInputs财务报告和审定财务报表unprocessed报告其他情况 - 失败带有输入
reason(例如:.cid_not_found, (中文(简体) ),missing_identifier_args, (中文(简体) ),invalid_cid_query)带有回收文本
开始
公共托管实例
可在 https://pubchem.caseyjhand.com/mcp 无需安装。 通过可流式HTTP将 MCP 客户端指向它 :
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "streamable-http",
"url": "https://pubchem.caseyjhand.com/mcp"
}
}
}
自有/当地
在您的 MCP 客户端配置文件中添加以下内容 .
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/pubchem-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}
或者用 npx( 不需要 Bun) :
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/pubchem-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}
或与道克相会:
{
"mcpServers": {
"pubchem-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubchem-mcp-server:latest"]
}
}
}
对于可流式HTTP,设置传输并启动服务器:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v1.4.0 (英语) 或更高(或Node.js v24+).
- 不需要API密钥——PubChem的API可以自由访问.
安装
- 清除仓库 :
git clone https://github.com/cyanheads/pubchem-mcp-server.git
- 导航到目录 :
cd pubchem-mcp-server
- 安装依赖性 :
bun install
- 配置环境( 可选) :
cp .env.example .env
# edit .env to override transport, session mode, storage, or logging defaults
配置
| 变量 | 说明 | 默认 |
|---|---|---|
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 . | 3010 |
MCP_HTTP_HOST | HTTP 服务器的主机 . | 127.0.0.1 |
MCP_SESSION_MODE | stateless, (中文(简体) ), stateful,或 auto。 。 。 . | stateless |
MCP_AUTH_MODE | Auth 模式 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424). | info |
STORAGE_PROVIDER_TYPE | 存储后端. | in-memory |
OTEL_ENABLED | 启用 OpenTeleometry . | false |
见 .env.example 用于完整可选覆盖列表.
运行服务器
地方发展
-
构建和运行 :
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试 :
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
夹克
docker build -t pubchem-mcp-server .
docker run --rm -p 3010:3010 pubchem-mcp-server
Dockerfile 默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/pubchem-mcp-server。默认情况下安装了 OpenTeleometry 端端依赖性 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 入口——登记工具/资源并输入PubChem客户端. |
src/mcp-server/tools/definitions/ | 工具定义*.tool.ts) (中文(简体) ). |
src/mcp-server/resources/definitions/ | 资源定义*.resource.ts) (中文(简体) ). |
src/services/pubchem/ | PubChem API客户端——速率限制,重试,以及响应/SDF解析. |
scripts/ | 构建,清洁,devcheck,和树生成脚本. |
tests/ | 单位与整合测试. |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log请求范围记录 - 环绕外部 API 调用: 验证原始 PubChem 响应 ~ 正常化到域类型 ~ 返回输出计划; 永远不编织缺失字段
- 登记册中的新工具和资源
index.ts桶文件
捐款
问题值得欢迎。 提交前运行检查 :
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.