@@ -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