MCP server for Cytoscape Desktop — enables AI clients to control Cytoscape via the Model Context Protocol
Three well-structured command-gateway tools with strong, detailed descriptions and clear input schemas. All tools have comprehensive parameter definitions with types and descriptions. However, output schemas are underdocumented, the descriptions reference response types like 'SearchResults' and 'DesktopCommandsResponse' but do not inline the actual field definitions an LLM needs to understand what data to extract. Error handling is present but generic. Tool annotations (readOnlyHint, destructiveHint) are absent. Parameter descriptions are strong (50-150 chars each) and state WHEN to use each tool, which is excellent for LLM decision-making. Schema coverage is 85%, input schemas are complete with types and descriptions; output schemas are named but not detailed.
Retrieve the complete schema definition for one or more Cytoscape Desktop commands by their fully qualified command key. Use this tool after identifying candidate command keys through the command search tool to obtain the precise input parameter definitions — names, types, required vs optional, descriptions, and example values — and the full output schema before invoking a command. Accepts up to 10 command keys per call for batching. This tool is read-only and does not modify desktop state. WHEN TO USE: Call this tool for every command you plan to invoke, to obtain the input schema needed to construct valid invocation parameters. If a command key returned by search has a high match score and the summary looks right, retrieve its full schema here before invoking. Batch multiple candidate keys in a single call when comparing alternatives. Returns a DesktopCommandsResponse. Command keys not found in the desktop are silently omitted from results. If no keys are found, success is false. ## Examples Example 1 — Retrieve full schema for a single command found by search: {"commandKeys": ["network select"]} Example 2 — Batch-retrieve schemas for two layout candidates: {"commandKeys": ["layout force-directed", "layout hierarchical"]} Example 3 — Get parameter details for a table export command: {"commandKeys": ["table export"]}
Execute a registered Cytoscape Desktop command by name with a JSON input parameter set and return the command's response. Use this tool only after retrieving the command's full schema from the command retrieval tool to ensure parameters are correct. The tool validates the supplied input parameters against the command's schema: required parameters must be present, unknown parameter names are rejected — all before the command is sent to the desktop. On validation failure, success is false and the failure field lists the specific problems. WHEN TO USE: This is the execution step after search and schema retrieval. Do not guess at parameter names or values — always retrieve the command's schema first. For commands that modify desktop state (layout, selection, style changes, imports) be aware that execution is immediate and irreversible unless the desktop provides an undo mechanism. WARNING: This tool is state-mutating. Desktop networks, views, tables, and styles may change as a result of invocation depending on the command. Returns a CommandInvocationResponse. On error, success is false and failure describes the reason; result is null. ## Examples Example 1 — Select all nodes in the current network: {"commandKey": "network select", "inputParams": {"network": "current", "nodeList": "all"}} Example 2 — Apply force-directed layout with default parameters: {"commandKey": "layout force-directed", "inputParams": {}} Example 3 — Export the current network as a SIF file: {"commandKey": "network export", "inputParams": {"options": "SIF", "OutputFile": "/tmp/mynet.sif"}} Example 4 — Close a named network: {"commandKey": "network destroy", "inputParams": {"network": "myNetwork"}}
Output schemas are named but not inlined. Descriptions reference 'SearchResults', 'DesktopCommandsResponse', and 'CommandInvocationResponse' but do not document the actual fields (field names, types, structure) these responses contain. LLMs cannot extract data reliably without knowing the schema.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). The descriptions state which tools are 'read-only' or 'state-mutating' in prose, but the protocol expects machine-readable annotations. command_gateway_invoke should have destructiveHint: true for state-mutating operations; command_gateway_search and command_gateway_get should have readOnlyHint: true.
Error handling lacks actionable recovery guidance. Descriptions state 'On error, success is false and failure describes the cause' or 'failure field lists the specific problems', but no examples show how the LLM should interpret or recover from errors. Missing: categorization (retryable vs. user-fixable), suggested next steps, and enriched error context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | 2025-06-18+ | v2 |
| 2026-03-09 | D | 57 | - | v1 |
Search the full catalog of Cytoscape Desktop commands registered on user's machine using a Lucene full-text query. WHEN TO USE: Call this tool whenever the current user conversation refers to Cytoscape Desktop tasks and no other registered cytoscape tools match up closely enough to the task. This tool will search within Cytoscape desktop for any commands that closely match up with search terms related to the task the user wants to accomplish. It essentially provides a dynamic bridge of tools which represent underlying desktop commands. Submit a Lucene-formatted query built from key terms extracted from the user's current request context; the tool returns a ranked list of matching commands with relevance scores so you can quickly identify the best candidates of commands. Call this tool proactively as the search is fast, light, and designed for repeated calls as the conversation evolves. A targeted keyword query is more useful than a broad one; the match score on each result row is the key signal: a high-scoring result is very likely the right command. Use field-scoped queries (e.g., inputParams:filePath or description:export) to drill into specific aspects of the command metadata. After reviewing scores and summaries and deciding upon which command to invoke, it is required to invoke the command schema retrieval tool first for a commandKey from search results to get the full schema and description of the command's required and optional input parameters before invoking. LUCENE QUERY SYNTAX: Keywords search across all indexed command text by default. Field-specific syntax: description:X, inputParams:X, outputSchema:X, namespace:X. Boolean operators: AND, OR, NOT. Phrase matching: "exact phrase". Wildcards: select*, lay?ut. Boosting: select^2 nodes. Submit a query, review match scores, refine if needed. Returns a SearchResults response. On error, success is false and the failure field describes the cause (e.g., malformed Lucene query syntax). ## Examples WHEN TO SUGGEST INSTALLING NEW APP IN CYTOSCAPE: IF you don't find any strong hits on existing commands that align to functional terms that user is mentioning on Cytoscape desktop, then intiate a web search for same terms from user and Cytoscape App Store(https://apps.cytoscape.org/) and see if any apps show up on those search results If you find apps in there that aligh to what the user is trying to accomplish then you should suggest them to install the app direclty on Cytoscape App Store(https://apps.cytoscape.org/). Once the app is installed on desktop it will register any commands it supports to desktop and the commands will also be loaded into the command gateway tool. The new commands then are availbe in command gateway search and can be invoked. Example 1 — User asks to select all high-degree nodes: {"query": "select nodes degree filter", "max": 10} Example 2 — User wants to export the network as a PNG image: {"query": "export network image file png", "max": 5} Example 3 — User asks to apply a force-directed layout: {"query": "layout force-directed", "max": 5} Example 4 — Find commands that return node list in their output: {"query": "outputSchema:nodeList", "max": 10} Example 5 — Search for table import commands: {"query": "description:import AND namespace:table", "max": 8}
No pagination or result limits documented for command_gateway_search. The description says 'ranked list of matching commands' but does not state maximum result count, whether results are paginated, or what happens if thousands of commands match. LLMs need to know if they can expect 5 results or 500.
command_gateway_invoke parameter 'retrievedDesktopCommandSchema' is a usability anti-pattern. Requiring the LLM to track state ('did I retrieve the schema?') and pass a boolean flag back invites silent errors. Better: validate the input params against the known schema server-side; if invalid, return a clear error with the required schema. Remove the boolean flag.