| name | ucsc_genome_exploration |
| description | UCSC Genome Browser Exploration - Explore genome via UCSC: list genomes, list tracks, get sequence, get track data, and cytoband info. Use this skill for genomics tasks involving list genomes list tracks get sequence get track data get cytoband. Combines 5 tools from 1 SCP server(s). |
UCSC Genome Browser Exploration
Discipline: Genomics | Tools Used: 5 | Servers: 1
Description
Explore genome via UCSC: list genomes, list tracks, get sequence, get track data, and cytoband info.
Tools Used
list_genomes from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
list_tracks from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
get_sequence from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
get_track_data from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
get_cytoband from ucsc-server (streamable-http) - https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC
Workflow
- List available genomes
- List tracks for hg38
- Get DNA sequence for BRCA1 region
- Get track data
- Get cytoband info
Test Case
Input
{
"genome": "hg38",
"chrom": "chr17",
"start": 43044295,
"end": 43125370
}
Expected Steps
- List available genomes
- List tracks for hg38
- Get DNA sequence for BRCA1 region
- Get track data
- Get cytoband info
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 = {
"ucsc-server": "https://scp.intern-ai.org.cn/api/v1/mcp/13/Origene-UCSC"
}
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: return c.text
return str(result)
except: return str(result)
async def main():
AsyncExitStack() stack:
sessions = {}
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)
()
result_5 = sessions[].call_tool(, arguments={})
data_5 = parse(result_5)
()
()
__name__ == :
asyncio.run(main())