SPOKEAgent
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SPOKEAGENT_PASSCODE | Yes | Passcode from the SPOKEAgent credentials page |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_spoke_schemaA | Return a COMPACT, curated map of the current SPOKE graph: node labels with counts and a Source->REL->Target edge directory with counts and cost flags. This is derived live from the database, so it reflects the real, current schema (robust to new/renamed labels or edges). It is small and cached - call it ONCE near the start of a task, then rely on resolve_entity + query_spoke. Use the edge_directory to pick the exact relationship type that connects two entity types before writing Cypher. |
| resolve_entityA | Map a free-text name, synonym, or identifier to the canonical SPOKE node(s). Use this BEFORE query_spoke. It handles the things that make naive queries fail: case-sensitivity (exact {name:...} is case-sensitive), apostrophes, synonyms/brand names, and cross-vocabulary identifiers (DOID, Entrez, Ensembl, DrugBank, UMLS CUI, UBERON, GO). It uses SPOKE's range and full-text indexes, so it is fast and never scans the whole graph. Returns ranked candidates: {label, name, identifier, matched_on, score}.
Then query by the returned exact |
| describe_nodeA | Show what a node is ACTUALLY connected to: its relationship types, the neighbour label on the other end, the direction, and the count for each. Use this to (a) decide which relationship to traverse for a question, and (b) avoid thrashing - if a node has no edge of the type you expected (e.g. a disease with no PRESENTS_DpS symptoms, or no LOCALIZES_DlA anatomy), this tells you immediately so you can report the absence instead of guessing more queries. Also ideal for open-ended "how is X connected / what is near X" questions. The node is resolved first (handles case / apostrophes / ids). Returns {node:{label,name,identifier}, relationships:[{dir, rel, neighbor_label, count}]}. |
| find_pathA | Find the shortest connecting path(s) between two entities in SPOKE - the right tool for "how are X and Y connected / what links X to Y / shortest path" and subgraph-bridge questions. Both endpoints are resolved first (case / apostrophe / id safe), then a bounded bidirectional allShortestPaths search runs (anchored, so it is fast and cannot scan the graph). Returns each path as an ordered list of nodes and the relationship types between them - so you can read off the intermediate nodes and mechanism in ONE call instead of probing many queries. If no path is found within max_hops, that is reported (try a larger max_hops, or the entities are only distantly connected). Returns {source, target, max_hops, paths:[{hops, nodes:[...], rels:[...]}]}. |
| query_spokeA | Execute a read-only Cypher query on SPOKE for biomedical knowledge inference. Behaviour built in for you:
Tips: resolve names first with resolve_entity; use the edge_directory from get_spoke_schema to choose relationship types; pass literals via parameters. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 5 tools
Each tool serves a clearly distinct purpose: schema discovery (get_spoke_schema), entity resolution (resolve_entity), neighborhood inspection (describe_node), pathfinding (find_path), and arbitrary querying (query_spoke). The only mild overlap is describe_node vs query_spoke for inspecting connections, but descriptions clearly guide when to use which.
All tool names follow a consistent snake_case verb_noun pattern (get_spoke_schema, resolve_entity, describe_node, find_path, query_spoke). The domain-specific inclusion of 'spoke' in two names does not break the pattern's predictability.
Five tools is well-scoped for a read-only graph query server, covering essential operations (schema, resolution, neighborhood, path, query) without redundancy or bloat. Each tool earns its place in the workflow.
The surface covers schema discovery, entity resolution, neighborhood inspection, pathfinding, and raw Cypher—near-complete for read-only exploration. A minor gap is the lack of a dedicated tool to retrieve node properties directly, though query_spoke can serve as a workaround; write operations are intentionally absent.