| name | genome_annotation |
| description | Genome Annotation Pipeline - Annotate a genome: NCBI annotation report, Ensembl gene lookup, UCSC tracks, and KEGG pathway links. Use this skill for genomics tasks involving get genome annotation report get lookup symbol list tracks kegg link. Combines 4 tools from 4 SCP server(s). |
Genome Annotation Pipeline
Discipline: Genomics | Tools Used: 4 | Servers: 4
Description
Annotate a genome: NCBI annotation report, Ensembl gene lookup, UCSC tracks, and KEGG pathway links.
Tools Used
get_genome_annotation_report from ncbi-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/9/Origene-NCBI
get_lookup_symbol from ensembl-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/12/Origene-Ensembl
list_tracks from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
kegg_link from kegg-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/5/Origene-KEGG
Workflow
- Get NCBI genome annotation
- Look up gene in Ensembl
- List UCSC tracks
- Link to KEGG pathways
Test Case
Input
{
"accession": "GCF_000001405.40",
"gene_symbol": "BRCA1",
"genome": "hg38"
}
Expected Steps
- Get NCBI genome annotation
- Look up gene in Ensembl
- List UCSC tracks
- Link to KEGG pathways
Usage Example
Note: Replace sk-b04409a1-b32b-4511-9aeb-22980abdc05c with your own SCP Hub API Key. You can obtain one from the SCP Platform.
import asyncio
import json
from contextlib import AsyncExitStack
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
from mcp.client.sse import sse_client
SERVERS = {
"ncbi-server": "https://scp.intern-ai.org.cn/api/v1/mcp/9/Origene-NCBI",
"ensembl-server": "https://scp.intern-ai.org.cn/api/v1/mcp/12/Origene-Ensembl",
"ucsc-server": "https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC",
"kegg-server": "https://scp.intern-ai.org.cn/api/v1/mcp/5/Origene-KEGG"
}
async def connect(url, stack):
transport = streamablehttp_client(url=url, headers={"SCP-HUB-API-KEY": "sk-b04409a1-b32b-4511-9aeb-22980abdc05c"})
read, write, _ = await stack.enter_async_context(transport)
ctx = ClientSession(read, write)
session = await stack.enter_async_context(ctx)
await session.initialize()
return session
def parse(result):
try:
if hasattr(result, 'content') and result.content:
c = result.content[0]
if hasattr(c, 'text'):
try: return json.loads(c.text)
except: c.text
(result)
: (result)
():
AsyncExitStack() stack:
sessions = {}
sessions[] = connect(, stack)
sessions[] = connect(, stack)
sessions[] = connect(, stack)
sessions[] = connect(, stack)
result_1 = sessions[].call_tool(, arguments={})
data_1 = parse(result_1)
()
result_2 = sessions[].call_tool(, arguments={})
data_2 = parse(result_2)
()
result_3 = sessions[].call_tool(, arguments={})
data_3 = parse(result_3)
()
result_4 = sessions[].call_tool(, arguments={})
data_4 = parse(result_4)
()
()
__name__ == :
asyncio.run(main())