Skip to content

Commit 80af115

Browse files
committed
Add MCP prompts — slash commands for Claude Desktop
Five prompts exposed via @mcp.prompt() that appear as slash commands in Claude Desktop: find_concept(concept) — search + show alignments compare_schemas(schema_a, schema_b)— diff two schemas map_record(source, target) — guided record transform submit_schema(schema_name) — walk through schema submission registry_overview() — full registry snapshot Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXeTeJsXisxTRXay6EoBSQ
1 parent 20123a8 commit 80af115

1 file changed

Lines changed: 72 additions & 0 deletions

File tree

neuro_ghost/mcp_server.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,78 @@ def ingest_schema(
423423
return {"status": "created", "issue_url": resp["html_url"]}
424424

425425

426+
# ---------------------------------------------------------------------------
427+
# Prompts — show up as slash commands in Claude Desktop
428+
# ---------------------------------------------------------------------------
429+
430+
@mcp.prompt()
431+
def find_concept(concept: str) -> str:
432+
"""Find a neuroscience concept across all registered schemas and show alignments."""
433+
return (
434+
f"Search the NeuroGhost registry for '{concept}':\n"
435+
f"1. Call search_classes(query='{concept}') to find matching classes.\n"
436+
f"2. For the top result, call get_alignments(class_name=<hash_id>) to show "
437+
f"how it aligns across schemas.\n"
438+
f"3. Summarise: what schemas define this concept, how similar are they, "
439+
f"and what SKOS relation links them (exactMatch, closeMatch, etc.)."
440+
)
441+
442+
443+
@mcp.prompt()
444+
def compare_schemas(schema_a: str, schema_b: str) -> str:
445+
"""Diff two schemas — which classes overlap and which are unique to each."""
446+
return (
447+
f"Compare the '{schema_a}' and '{schema_b}' schemas in NeuroGhost:\n"
448+
f"1. Call diff_schemas(source_a='{schema_a}', source_b='{schema_b}').\n"
449+
f"2. Report: how many classes are shared vs unique to each schema, "
450+
f"list the top 5 closest shared pairs by distance score, and highlight "
451+
f"any classes that appear only in one schema but have no close equivalent "
452+
f"in the other."
453+
)
454+
455+
456+
@mcp.prompt()
457+
def map_record(source_schema: str, target_schema: str) -> str:
458+
"""Guide for transforming a data record from one schema to another."""
459+
return (
460+
f"I want to transform a data record from '{source_schema}' format to "
461+
f"'{target_schema}' format using NeuroGhost.\n\n"
462+
f"Please:\n"
463+
f"1. Call list_sources() so I can see which schemas are registered.\n"
464+
f"2. Ask me to paste my '{source_schema}' record as a JSON dict.\n"
465+
f"3. Call transform_record(source_schema='{source_schema}', "
466+
f"target_schema='{target_schema}', record=<my dict>).\n"
467+
f"4. Show me the mapped fields, any unmapped fields, and explain what "
468+
f"alignment edges were used."
469+
)
470+
471+
472+
@mcp.prompt()
473+
def submit_schema(schema_name: str) -> str:
474+
"""Walk through submitting a new LinkML schema to the NeuroGhost registry."""
475+
return (
476+
f"I want to submit a new schema called '{schema_name}' to NeuroGhost.\n\n"
477+
f"Please guide me through:\n"
478+
f"1. Call list_sources() to confirm '{schema_name}' isn't already registered.\n"
479+
f"2. Ask me to paste my LinkML YAML.\n"
480+
f"3. Call ingest_schema(schema_yaml=<my yaml>, schema_name='{schema_name}') "
481+
f"— if I have a GitHub token I'll provide it, otherwise use the manual URL.\n"
482+
f"4. Explain what happens next (CI validates, aligns, and archives it)."
483+
)
484+
485+
486+
@mcp.prompt()
487+
def registry_overview() -> str:
488+
"""Get a quick overview of everything currently in the NeuroGhost registry."""
489+
return (
490+
"Give me a quick overview of the NeuroGhost registry:\n"
491+
"1. Call list_sources() and summarise each schema (name, class count, version).\n"
492+
"2. Call get_provenance() and show the 3 most recent registry updates.\n"
493+
"3. Pick the two largest schemas and call diff_schemas() on them — "
494+
"how much do they overlap?"
495+
)
496+
497+
426498
# ---------------------------------------------------------------------------
427499
# Entry point
428500
# ---------------------------------------------------------------------------

0 commit comments

Comments
 (0)