geogebra-mcp
This MCP server lets an AI draw, inspect, verify, edit, and export plane-geometry figures live on GeoGebra Calculator.
Run GeoGebra commands in order, with per-command results, warnings, failures, and hints; assigning an existing name redefines it.
Read the current figure: objects, types, definitions, values, coordinates, visibility, dependencies, and dependents.
Take screenshots of the drawing area or full GeoGebra window for visual checking.
Evaluate expressions without adding objects, e.g. angles, distances, collinearity, parallelism, radius, area.
Change object style: color, visibility, label, caption, thickness, line style, point size, fill, fixed.
Delete objects and their dependents, or clear the whole figure.
Undo changes made through the server.
Save, restore, and list named figure snapshots during the server run.
Fit the view to visible points/circles, and toggle axes or grid.
Export the figure as a
.ggbGeoGebra file or.pngimage.
geogebra-mcp
An MCP server that lets an AI (Claude Desktop, Claude Code, Cursor, …) draw and edit plane-geometry figures directly on GeoGebra Calculator (https://www.geogebra.org/calculator).
Unlike the copy/paste workflow of the GeoGebra AutoDraw AI extension, the AI here works in a loop: it runs commands, reads errors and the figure state, verifies properties, looks at a screenshot, and fixes the figure itself — and it can edit the figure on request ("H must be the foot from A").

How it works
AI client ──MCP (stdio)──► geogebra-mcp ──Playwright──► Chrome window: geogebra.org/calculator
└─ window.ggbApplet (GeoGebra JS API)On the first tool call the server opens a Chrome (or Edge) window on GeoGebra Calculator. The user watches the figure being drawn and can drag/edit it by hand.
Tools call the GeoGebra JS API (
ggbApplet) inside the page throughpage.evaluate— no simulated clicks.Commands run through
asyncEvalCommandGetLabels, which lazy-loads GeoGebra modules, so prover/scripting commands (AreCollinear,Incircle,TriangleCenter,ClosestPoint(line, point)…) work.GeoGebra reports a failed command only as
null, so the server adds its own diagnostics (unknown names, unknown commands, unbalanced brackets, known pitfalls) and warnings (undefined results, reserved names, two-point intersections without an index).If the window is closed or reloaded, the next tool call reopens it and restores the last known figure.
Undo is managed by the server (XML history), because
ggbApplet.undo()does not revert API commands.
Related MCP server: inkscape_mcp
Tools
Tool | Purpose |
| Run commands in order; per-command result, created/removed objects, warnings, failure hints. Assigning to an existing name redefines it. |
| Objects with type, definition, value, coordinates, visibility, |
| PNG of the drawing area (or the whole window) for visual checking. |
| Evaluate expressions without adding objects ( |
| Color, visibility, label, caption, thickness, line style, point size, fill, fixed. |
| Delete objects (and their dependents). |
| Start a new figure. |
| Revert changes made through the server. |
| Save / restore / list named versions. |
| Fit every visible point and circle in view (1:1 ratio), toggle axes/grid. |
| Save as |
Also: resource geogebra://rules (construction rules), resource geogebra://commands (command catalog), prompt draw_geometry_problem.
Setup
Requirements: Node.js ≥ 20 and Google Chrome or Microsoft Edge (otherwise run npx playwright install chromium).
Claude Code (plugin)
claude plugin marketplace add haison8x/geogebra-mcp
claude plugin install geogebra-mcp@geogebra-toolsThe server then shows up in /mcp as plugin:geogebra-mcp:geogebra. Update later with claude plugin update geogebra-mcp@geogebra-tools.
Claude Code (without the plugin)
claude mcp add geogebra -- npx -y geogebra-mcpClaude Desktop, Cursor and other MCP clients
Edit claude_desktop_config.json (Settings → Developer → Edit Config), or your client's MCP config:
{
"mcpServers": {
"geogebra": {
"command": "npx",
"args": ["-y", "geogebra-mcp"]
}
}
}Then restart the client and ask, for example: "Vẽ tam giác ABC nội tiếp đường tròn (O), đường cao AH, M là trung điểm BC."
From source
git clone https://github.com/haison8x/geogebra-mcp.git
cd geogebra-mcp
npm install
npm run build
claude mcp add geogebra -- node /path/to/geogebra-mcp/dist/index.jsConfiguration (environment variables)
Variable | Default | Meaning |
| try | Browser channel |
|
|
|
|
| Browser profile (keeps the GeoGebra login). One server instance per profile. |
|
| Page to open |
Development
Releasing: bump the version in package.json, .claude-plugin/plugin.json, .claude-plugin/marketplace.json, server.json (both version fields) and the pinned version in .mcp.json. Then push, npm publish, mcp-publisher publish, and create a GitHub release.
npm run build
npm run smoke # end-to-end test through a real MCP client (headless)
npm run smoke -- --headed # same, with a visible windowNotes
GeoGebra is free for non-commercial use; check the GeoGebra license before any commercial use of this automation.
Snapshots and undo history live in memory while the server runs.
Available Tools
11 toolsggb_clearClear the figureADestructive
Remove every object to start a new figure (can be reverted with ggb_undo).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description isn't carrying the safety burden alone. It still adds real value by disclosing reversibility via ggb_undo, which the annotation does not express. It omits whether view/zoom state is also reset and gives no auth or rate-limit context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero waste; the destructive scope is front-loaded and the recovery note is parenthetically appended rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool with a destructive annotation, the description supplies everything needed to invoke it safely: what is removed, the scope, and how to reverse it. It could be slightly more complete by noting whether viewport settings survive the clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 per the rubric. The description correctly implies no filtering or scope arguments are accepted, and there is nothing further for it to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and an unambiguous resource scope (every object) with the intent (start a new figure). The 'every object' scope implicitly distinguishes it from the object-level ggb_delete, but it never names that sibling, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use ('to start a new figure') and names the recovery path (ggb_undo), which is genuinely actionable routing information. It stops short of an explicit when-not clause or naming ggb_delete as the narrower alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_deleteDelete objectsADestructive
Delete objects. WARNING: everything that depends on them is deleted too (see usedBy in ggb_get_state). To change an object, redefine it with ggb_run_commands instead.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true; the description goes further by disclosing the cascade — everything depending on the deleted objects is deleted too — and points at usedBy in ggb_get_state as the way to preview the blast radius. It stops short of stating reversibility (ggb_undo exists as a sibling) or what a partial/failed delete reports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and the destructive caveat before the alternative. Every sentence carries distinct information: action, cascade consequence, and the correct path for modification. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the description supplies the essentials: what is destroyed beyond the named objects and what to use instead. Gaps are the accept/reject behavior for unknown names and whether the operation can be reversed via ggb_undo.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter, 'names', with 0% schema description coverage and no enum guidance. The description never explains that names are object labels matching those returned by ggb_get_state/ggb_screenshot — it only alludes to 'objects' and usedBy, which is too indirect to compensate for the complete absence of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete objects') and immediately scopes the action by noting that dependents are removed as well. It also names the sibling it is not (ggb_run_commands for redefinition), so an agent can separate it from ggb_run_commands and ggb_clear without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative with a condition: to *change* an object, use ggb_run_commands instead of deleting and recreating. It also routes the agent to ggb_get_state's usedBy data before deleting. It does not address how this differs from a bulk wipe like ggb_clear, so the routing is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_evaluateEvaluate expressionsARead-only
Evaluate GeoGebra expressions against the current figure WITHOUT adding objects, to verify the construction. Examples: "Angle(B, A, C)", "Distance(B, M) == Distance(M, C)", "AreCollinear(A, H, O)", "AreParallel(Line(A, D), Line(B, C))", "Radius(omega)", "Area(poly1)".
| Name | Required | Description | Default |
|---|---|---|---|
| expressions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description adds the meaningful behavioral fact that evaluation leaves the figure unchanged, which is stronger than the annotation alone. It omits what happens on invalid expressions or how results are returned, but the critical side-effect question is answered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause and the examples follow as supporting detail. The example list is slightly long but each sample demonstrates a distinct expression class (measurement, equality check, predicate, object property).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate what evaluation yields (numeric values, booleans, per-expression results) and how failures are surfaced; it says nothing about return shape or error behavior. The functional purpose and expression syntax are well covered, so the gap is limited to results handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'expressions' array, so the description must carry the load, and its six concrete expression examples do substantially clarify the expected GeoGebra syntax and boolean-comparison forms. It does not explain batch semantics (one result per item, evaluation order) or the 1-50 item bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Evaluate) plus resource (GeoGebra expressions against the current figure) and explicitly scopes it as not adding objects, which is exactly what separates it from the sibling ggb_run_commands. An agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'WITHOUT adding objects, to verify the construction' gives a clear use context (checking/validating an existing figure rather than mutating it), implying the alternative ggb_run_commands for object creation. It never names that sibling or states when-not to use this tool, so it stops short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_exportExport the figureB
Save the figure to a local file: "ggb" (GeoGebra file, can be opened again in GeoGebra) or "png" (image).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Destination file path on this computer | |
| format | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond format meaning. It does not say whether an existing file is overwritten, whether the directory must exist, what happens on failure, or what the call returns — all material for a tool that writes to disk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the action comes first and the format details follow as needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema export tool this is minimally adequate — format semantics are covered — but overwrite/error behavior and confirmation of success are left unspecified, which matters for a file-writing operation with no annotations to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: 'path' is documented in the schema but 'format' is a bare enum. The description fills exactly that gap by explaining what 'ggb' and 'png' mean and that a .ggb file can be reopened in GeoGebra, which is genuinely useful beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (save/export) and resource (the figure) plus the two supported output formats. It is clear what the tool does, though it never names or distinguishes itself from the sibling ggb_screenshot, which also produces an image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Save the figure to a local file' implies when to reach for it (persisting output to disk), and the parentheticals hint at format selection. However, there is no explicit when-not guidance or comparison to ggb_screenshot, so the agent must infer the boundary itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_fit_viewFit the viewA
Zoom/pan so every visible point and circle fits in the drawing area (1:1 axis ratio). Optionally show/hide axes and grid.
| Name | Required | Description | Default |
|---|---|---|---|
| padding | No | Margin as a fraction of the figure size | |
| show_axes | No | ||
| show_grid | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the fit normalizes to a 1:1 axis ratio and that it can also mutate axes/grid visibility, which is a side effect beyond the name. It does not state whether the view change is undoable, whether omitted flags leave existing state untouched, or whether hidden objects are excluded from the fit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core effect, then the invariant in a compact parenthetical, then the optional flags. No filler and no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, side-effect-light view tool with no output schema this is roughly adequate: the visual outcome and the two toggles are covered. It still leaves the omission semantics of show_axes/show_grid and the treatment of off-screen or hidden objects unspecified, which an agent would need before calling it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%: 'padding' is documented in the schema, while show_axes/show_grid have no schema descriptions. The description partially compensates by explaining that those two flags show/hide axes and grid, but it never clarifies the default behavior when they are omitted or how padding interacts with the fit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action pair (zoom/pan), the trigger condition (so every visible point and circle fits in the drawing area), and an invariant (1:1 axis ratio). It is clearly distinct from siblings like ggb_screenshot or ggb_set_style, though it does not explicitly contrast itself with any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the effect described ('so every visible point and circle fits'), letting an agent infer it is a remediation call after objects fall outside the viewport. There is no explicit when-to-use, when-not-to-use, or named alternative, so it stays at the minimum-viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_get_stateRead the figureARead-only
List the objects currently in the figure: name, type, definition, value, point coordinates, visibility, dependsOn (parents) and usedBy (objects that would change or be deleted with it). Always call this before fixing a figure: the user may have edited it by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | Only return these objects | |
| include_hidden | No | Include hidden helper objects. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=true provided, the description usefully adds the return contract (the exact fields listed) and defines the semantics of dependsOn/usedBy, including the destructive implication of usedBy ('objects that would change or be deleted with it'). It does not mention pagination, cost, or size limits on a potentially large figure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the output inventory, followed by the actionable directive to call it before fixing. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating every returned field and explaining dependsOn/usedBy. Safety is covered by the readOnly annotation, and the usage trigger is stated, leaving nothing critical missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (names, include_hidden) are already documented in the schema. The description adds no additional constraint or format guidance for them, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List the objects currently in the figure') and then enumerates exactly what each entry contains (name, type, definition, value, coordinates, visibility, dependsOn, usedBy). This distinguishes it from screenshot/evaluate siblings without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule: 'Always call this before fixing a figure: the user may have edited it by hand.' That's a clear context trigger. It does not name alternative tools or when-not-to-use, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_run_commandsRun GeoGebra commandsA
Run GeoGebra commands on the live figure, in order (English command names, e.g. "A = (-1, 6)", "M = Midpoint(B, C)", "ShowLabel(a, false)", "SetVisibleInView(h, 1, false)", "Delete(P)"). Assigning to an existing name REDEFINES that object and its dependents update. Returns, per command: ok, created/removed objects, warnings (undefined objects, names not created) and, for failures, hints about the likely cause.
| Name | Required | Description | Default |
|---|---|---|---|
| commands | Yes | Commands to run, one per item, in execution order | |
| stop_on_error | No | Stop at the first failed command (later commands usually depend on it). Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does fairly well: it discloses the redefinition semantics ('Assigning to an existing name REDEFINES that object and its dependents update'), execution ordering, and the failure surface (warnings for undefined objects and names not created, plus cause hints). It does not state prerequisites such as whether a figure/session must already be open or whether destructive removal via Delete(P) is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then semantics, then return shape; every element earns its place. The inline example list is long but justified for a free-form command string parameter, though it makes the middle of the description dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description does the heavy lifting by explaining the per-command return fields (ok, created/removed objects, warnings, failure hints). Remaining gaps are prerequisites (active figure, permissions) rather than return-value omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description reinforces ordering semantics for 'commands' and the dependency rationale behind stopping early, but adds no syntax or constraint detail beyond the schema (the maxItems=300 limit, for instance, appears only in the schema).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run GeoGebra commands on the live figure, in order') and backs it with concrete command examples ('A = (-1, 6)', 'Midpoint(B, C)', 'SetVisibleInView(h, 1, false)'). The command-batch framing is clearly distinguishable from siblings like ggb_evaluate, ggb_set_style, and ggb_delete, which operate on a single object or expression.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the examples and the phrase 'in order' suggest this is for scripted multi-step figure construction or edits. There is no explicit when-to-use guidance and no mention of when a sibling (ggb_evaluate, ggb_set_style, ggb_delete) would be the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_screenshotScreenshot the figureARead-only
Return a PNG image of the drawing area so you can check the figure visually (overlapping labels, figure off-screen, wrong shape). Set full_window to capture the whole GeoGebra window including the algebra panel.
| Name | Required | Description | Default |
|---|---|---|---|
| full_window | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read; the description usefully adds that the result is a PNG of the drawing area and that full_window pulls in the algebra panel. It does not mention image size, resolution, or whether the capture reflects current zoom/state, so remaining behavioral gaps are minor but real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the return type and immediately followed by the parameter explanation. No filler or restated boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-boolean, read-only capture tool with no output schema, the description covers what is returned and what the flag does. Only the absence of any note about image dimensions or capture fidelity keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load, and it does explain the one parameter clearly: full_window captures the whole GeoGebra window including the algebra panel, versus the default drawing-area-only view. This is meaningful semantics beyond the bare boolean and default in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Return a PNG image of the drawing area.' The parenthetical use cases (overlapping labels, off-screen figure, wrong shape) sharpen it further. It does not distinguish itself from close siblings like ggb_snapshot or ggb_export, which prevents a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it: visual verification of the figure. However, it offers no guidance on when to prefer ggb_snapshot or ggb_export instead, and no exclusions, so it sits below the explicit-alternatives tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_set_styleStyle objectsC
Change how objects look: color, visibility, label, caption (text shown instead of the name), thickness, line style, point size, fill, fixed.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Hex color, e.g. "#d32f2f" | |
| fixed | No | Prevent the user from dragging the object | |
| names | Yes | ||
| caption | No | Text shown as the label; empty string restores the name | |
| filling | No | Fill opacity 0..1 for polygons and circles | |
| visible | No | ||
| line_style | No | ||
| point_size | No | ||
| label_visible | No | ||
| line_thickness | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does not meet it. It says nothing about whether the change is reversible/undoable, what happens with invalid or missing object names, whether it requires the objects to exist, or how errors surface. Only the surface effect ('look') is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence leads with the core action and then lists options; no filler. The dense comma list is slightly hard to parse but earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 10-parameter mutation tool with no annotations, no output schema, and 40% schema coverage needs more than a property list. The required 'names' parameter, mutation semantics, error behavior, and return value are all unaddressed, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 40%, so the description must compensate. It does list most updatable fields (color, visibility, label, caption, thickness, line style, point size, fill, fixed) and clarifies caption as 'text shown instead of the name', which is helpful. However it omits the required 'names' parameter entirely and adds no format/syntax detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change how objects look') and enumerates the style properties affected, so the agent knows this mutates visual attributes rather than geometry. It does not explicitly differentiate itself from siblings like ggb_run_commands, which could plausibly also set style.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (the target objects must already exist), and no reference to an alternative tool. The usage context is only weakly implied by the verb 'Change'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_snapshotSave / restore a versionB
Save the current figure under a name, restore a saved one, or list saved names. Snapshots live while the server runs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one important trait: snapshots are in-memory and vanish when the server stops. However, it does not state that 'restore' overwrites the current figure (a destructive outcome), what happens on restore of an unknown name, or whether saved snapshots can be re-saved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no wasted words; the action list comes first and the lifetime caveat second. Slightly terse given the gaps it leaves, but structurally sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation-capable tool with no annotations, no output schema, and 0% schema coverage, the description leaves the per-action parameter contract and restore semantics unstated. The lifetime note is helpful but the definition is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate; it only partially does. It links 'name' to the save action, but never says that name is required for save/restore and irrelevant for list, nor does it define any naming constraints or collision behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs (save, restore, list) against a clear resource (the current figure / saved snapshots), so an agent immediately knows this is the snapshot-management tool. It does not explicitly name or rule out any sibling (e.g. ggb_clear or ggb_undo), so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three actions imply the situations in which the tool is used, but there is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as ggb_undo or ggb_clear for reverting state. Usage is inferable from the action enum alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ggb_undoUndoA
Revert the last change(s) made through this server (run_commands, set_style, delete, clear, snapshot restore).
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the scope of what undo covers (changes made through this server, and which operation types), which is real context. However it does not state whether the undo is itself reversible, how deep the history is, or what happens when the limit is hit — significant gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical enumeration is compact and earns its place by defining undo scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description covers purpose and undo scope but omits the behavioral details an agent needs: irreversibility, history depth, and the semantics of the undocumented 'steps' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the single 'steps' parameter. The phrase 'last change(s)' weakly hints that multiple changes can be reverted, but the default of 1, the minimum of 1, and the maximum of 50 are left entirely to the schema with no explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific verb (revert) and scopes the resource precisely to changes made through this server, then enumerates exactly which sibling operations are undoable (run_commands, set_style, delete, clear, snapshot restore). An agent can distinguish this from the mutation siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — call it to reverse a prior change — and the enumerated undoable operations clarify the context. But there is no explicit when-to-use vs. an alternative, no exclusions, and no mention of what to do if the undo history is empty or exhausted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v0.1.0- First observed
ggb_clear - First observed
ggb_delete - First observed
ggb_evaluate - First observed
ggb_export - First observed
ggb_fit_view - First observed
ggb_get_state - First observed
ggb_run_commands - First observed
ggb_screenshot - First observed
ggb_set_style - First observed
ggb_snapshot - First observed
ggb_undo
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: ggb_run_commands mutates the figure while ggb_evaluate only reads, ggb_delete removes specific objects while ggb_clear wipes all, and ggb_snapshot (in-memory) is clearly separated from ggb_export (file). Overlaps are explicitly called out and resolved in the descriptions.
All tools use the ggb_ prefix with snake_case, mostly verb_noun (ggb_run_commands, ggb_get_state, ggb_set_style, ggb_fit_view). The few single-verb names (ggb_delete, ggb_undo, ggb_clear) are natural and consistent with the convention.
11 tools is well within the ideal 3-15 range and each tool earns its place by covering a distinct facet of figure manipulation. Nothing feels redundant or padded.
The surface covers execution, inspection, visual check, evaluation, styling, deletion, undo, snapshots, view fitting, export, and clearing—a strong lifecycle. Minor gaps exist (no import/load of an existing .ggb file, though snapshot restore partially covers this), but core workflows are complete.
Maintenance
Related MCP Connectors
Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
MCP server for AI dialogue using various LLM models via AceDataCloud
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables AI models to generate precise geometric images by providing Asymptote code, supporting both SVG and PNG output formats.120 npm6ISC
- AlicenseNot gradedqualityCmaintenanceMCP server that lets AI agents drive Inkscape — interactively alongside the GUI or headlessly from the CLI353 PyPI77MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that bridges Claude with AutoCAD, enabling to generate architectural floor plans, draw geometry, and export DXF files just by describing what you need in natural language.-
- AlicenseAqualityDmaintenanceMCP server that generates 3Blue1Brown-style math videos with Manim and AI voiceover directly inside Claude Desktop.211 npmMIT