docs(skills): add graphistry-mcp skill - #32
Conversation
Covers driving a live Graphistry visualization session from an MCP client: connecting over Streamable HTTP, personal-key and JWT auth, the session ownership model, the nine-tool surface, and GFQL as the JSON wire format. Documents the query shapes that return success with empty or wrong results rather than erroring. A zero-row answer from any of them reads as a real zero, which is the most common way an agent reports a confidently wrong finding. Records two behaviors that are easy to get wrong: only the session owner may mutate, while reads can succeed for a non-owner with access to the dataset; and an agent handed a session should use it rather than discover one, since list_sessions returns bare ids and picking among two open graphs is silent. Routes MCP client tasks from the graphistry entrypoint skill, and separates the viz MCP from the unrelated PyGraphistry MCP repository sharing the name. SKILL.md is 193 lines, with the full GFQL JSON forms in references/ per the under-200 convention. Decision-critical rules stay inline: the five operation types, the JSON-string encoding, Edge returning a subgraph rather than a projection, Let/Ref as a top-level object, and the silent-failure list.
|
@dess890 Can you add an eval set with baseline performance? |
|
Added eval journeys with baseline. 14 cases across three intents, 0 regressions. Reproduce with |
|
Reviewed against pygraphistry The wire format holds up. I executed every GFQL claim rather than reading it — the predicate Two things block shipping; the rest can follow. Blocks ship1. The server changed after the skill was verified, and one bullet now misfiresThe skill was corrected against the shipped server in mid-August. The endpoint has moved since, and That collides with the skill's only advice about a refused collection:
For this new class the expression is the problem, and the server returns the repair. An agent It also dead-ends the documented workflow: step 5 says reuse the validated JSON unchanged, but the To unblock (small): document the new refusals, rewrite the "don't reword" bullet to cover them, The part I can't size: I checked two areas and found problems in both, so there may be more. 2. README, or the skill is unreachable and the new router edge dangles
Compounding it: the PR edits Two one-line edits. CI won't catch it: the install smoke test hardcodes the six Can followNone of these reach a user — the eval suite is internal, and the rest are precision or editorial. 3. The evals measure whether the doc was supplied, not whether agents do betterAll 14 cases ask the model to restate a proposition the skill asserts — "Can Cypher go to This repo already has the better patterns. Suggestion: add cases of the form given this schema and this request, produce the 4. One eval check rejects its own reference answer
Fix: delete the Same bug, smaller, in 5. A large share of the skill restates what the server already sendsEvery client receives the tool descriptions at Cost is secondary; the risk is two copies of the same rules in two repos with no test between them, Smaller
Questions
Exact citations, probe scripts and the per-claim evidence are in my working notes — happy to walk |
lmeyerov
left a comment
There was a problem hiding this comment.
see comment - good for merge/release after review and addressed as desired
| @@ -0,0 +1,116 @@ | |||
| # GFQL wire format | |||
There was a problem hiding this comment.
ok to have this, though unsure why we do, seems better to advocate cypher as LLM's understand it better
Adds a
graphistry-mcpskill so an external MCP client can drive a live Graphistryvisualization session: connecting to the viz MCP endpoint, personal-key and JWT auth, the
session model, the tool surface, and GFQL as JSON over the wire.
Two servers share the name "graphistry mcp" — the viz MCP endpoint and the PyGraphistry MCP
repo. The skill opens by disambiguating them, since picking the wrong one wastes a whole
session.
Every factual claim was checked against the shipped server and each GFQL shape was executed
rather than read. Eleven were wrong on the first pass and are corrected here — notably that
aggregations need the column they aggregate (only
countmay be a 2-element pair), thatpredicate type names are case-sensitive and the operand key differs by family, and that three
shapes filed under "fails silently" actually fail loudly with named error codes.
Server-side counterpart: graphistry/graphistry#3481.