Semiotic MCP Server

Pick, validate, repair and render Semiotic React charts, and audit them for accessibility

Official · nteract TypeScript Remote (hosted) · Streamable HTTPLocal · stdio, Streamable HTTP Developer toolsData and analytics

84 popularity score ★ 2.7k ↓ 9.6k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Its docs show no set-up for a particular client: add this address in your client the way it adds a remote MCP server.

Addressits hosted endpoint
https://semiotic-mcp-server-481507046413.us-west1.run.app/mcp
Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http semiotic http://127.0.0.1:3001/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "semiotic": {
      "url": "http://127.0.0.1:3001/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "semiotic": {
      "type": "http",
      "url": "http://127.0.0.1:3001/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.semiotic]
url = "http://127.0.0.1:3001/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http semiotic http://127.0.0.1:3001/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add semiotic -- npx -y -p semiotic semiotic-mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "semiotic": {
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "semiotic",
        "semiotic-mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "semiotic": {
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "semiotic",
        "semiotic-mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "semiotic": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "-p",
        "semiotic",
        "semiotic-mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.semiotic]
command = "npx"
args = ["-y", "-p", "semiotic", "semiotic-mcp"]
Gemini CLITerminal
gemini mcp add --scope user semiotic npx -- -y -p semiotic semiotic-mcp

Settings 11

MCP_TOOL_PROFILE Optional: Tool set: developer (24 tools) or public (5 workflow tools); --profile overrides it, and any other value stops startup. Default developer.
MCP_MAX_TOOL_OUTPUT_BYTES Optional: Largest tool response sent before an error is returned instead. Default 2097152.
MCP_MAX_RENDER_WORK_MS Optional: Time budget for render work. Default 2500. For renderChart.
MCP_MAX_PNG_CONVERSION_MS Optional: Time budget for PNG conversion. Default 4000. For renderChart.
Set together: http
MCP_HOST Optional: HTTP mode: address to bind; --host overrides it. Default 127.0.0.1.
MCP_AUTH_TOKEN secret Optional: HTTP mode: token clients must send in the Authorization header.
MCP_AUTH_SCHEME Optional: HTTP mode: scheme expected before MCP_AUTH_TOKEN. Default Bearer.
MCP_ALLOWED_HOSTS Optional: HTTP mode: comma-separated Host header allowlist.
MCP_ALLOWED_ORIGINS Optional: HTTP mode: comma-separated Origin allowlist, needed by browser clients.
MCP_MAX_BODY_BYTES Optional: HTTP mode: largest request body accepted. Default 4194304.
OPENAI_APPS_CHALLENGE_TOKEN secret Optional: HTTP mode: token served at /.well-known/openai-apps-challenge for ChatGPT Apps domain verification.

What it does

Semiotic is a React data visualization library from the nteract project. Its npm package carries an MCP server, semiotic-mcp, so a coding assistant can look up, check and render Semiotic charts through tool calls instead of writing chart code unchecked.

In its default developer profile the server registers 24 tools. They cover prop schemas for any component, chart and dashboard recommendations from sample rows or stream schemas, anti-pattern diagnosis and repair of a chart configuration, and static rendering to SVG or PNG. There are also data summaries and grounding payloads so the assistant can answer questions about a chart, Chartability accessibility and mobile audits, and checks for misleading design. A further set audits an explicit artifact contract under a named policy and explains refusals. It also serves 13 resources (schemas, examples, behaviour contracts, a system prompt, task packets and a ChatGPT Apps widget template) and two prompts for building and debugging a chart.

Started with --profile public (or MCP_TOOL_PROFILE=public), it registers a smaller set of five workflow tools instead: createChart, improveChart, explainChart, auditChart and getChartSchema. Startup is strict. An unknown flag, a repeated flag or a profile name other than developer or public stops the server before it serves anything.

It runs locally with npx over stdio, or with --http for Streamable HTTP on port 3001 by default. The registry entry also lists a hosted Streamable HTTP endpoint on Google Cloud Run. No API key or account is needed.

What it needs

To run it yourselfNode.js 22.12+
Runs onmacOS, Windows, Linux

Limits

  • Not covered renderChart is a static snapshot: props must carry data, and ref/push-mode streaming charts cannot be rendered
  • Limit PNG output needs the sharp package, an optional dependency; if it did not install, only SVG works
  • Size cap HTTP mode refuses request bodies over 4 MB by default (MCP_MAX_BODY_BYTES)
  • Size cap Tool responses over 2 MiB are replaced by an error by default (MCP_MAX_TOOL_OUTPUT_BYTES)
  • Rate limit Render work times out after 2500 ms and PNG conversion after 4000 ms by default (MCP_MAX_RENDER_WORK_MS, MCP_MAX_PNG_CONVERSION_MS)
  • Not covered suggestChart takes 1 to 5 sample rows
  • Early release renderInteractiveChart, the ChatGPT Apps widget surface, is called experimental in the README
  • Limit HTTP mode rejects any browser request carrying an Origin header unless MCP_ALLOWED_ORIGINS lists it; wildcard origins are not supported
  • Limit An unknown or repeated startup flag, or an invalid profile name, stops the server at startup

Who it suits

Suits developers building charts with Semiotic in React who want their coding assistant to check props against the real schema, catch configuration mistakes and see a rendered result before handing over code. Everything runs on the user's machine with no account, and every tool only reads its input and returns a result. It is of little use for projects on other chart libraries, since all schemas and recommendations are Semiotic's. Teams wanting a remote connector for ChatGPT can run HTTP mode behind a tunnel with a host allowlist and bearer token, or use the hosted endpoint if sending chart data to the maintainers' service is acceptable.

Tools 29

29 only read. A ? marks an optional parameter.

getSchema
Returns a component's prop schema, or lists all components when none is namedcomponent?: string
suggestChart
Recommends a chart from one to five sample rows, with capability filtersdata: arrayintent?: stringcapabilities?: object
suggestCharts
Recommends static charts by capability, taking the audience into account
proposeChartVariants
Ranks variants of, and alternatives to, a chosen chart
suggestStreamCharts
Recommends streaming charts from a data schema
suggestStreamDashboard
Lays out a multi-panel dashboard from stream schemas
suggestDashboard
Recommends a multi-panel dashboard
suggestStretchCharts
Suggests less familiar charts suited to an audience's chart literacy
repairChartConfig
Checks a chart choice against the data and proposes alternatives
renderChart
Renders a static-data chart to SVG, or to PNG when sharp is installedcomponent: stringprops?: objectcontract?: objecttheme?: objectformat?: enum
interrogateChart
Summarises a chart's data so questions about it can be answered
groundChart
Returns a chart's description, intent and navigable structure for a non-visual reader
diagnoseConfig
Finds anti-patterns in a chart configuration
auditAccessibility
Runs a Chartability accessibility audit
evaluateChart
Evaluates data fit, misleading design and accessibility together
auditMobileVisualization
Audits a chart for mobile display
reportIssue
Builds a pre-filled GitHub issue link for a bug or feature request; it does not file it
applyTheme
Explains how to use a theme preset
renderInteractiveChart
Wraps a rendered chart SVG in a ChatGPT Apps widget
suggestTokenEncoding
Recommends semantic token and ISOTYPE encodings
auditArtifact
Audits an explicit interpretation contract against a named policy
recommendRepresentation
Weighs chart and non-chart ways to present the data
repairArtifact
Proposes repairs to an artifact or fills its missing identity fields
explainRefusal
Explains why a policy refused an artifact contract
createChart
Public profile only: picks, validates, renders and proves a chart from data rows
improveChart
Public profile only: diagnoses a configuration and proposes repairs or variants
explainChart
Public profile only: describes a chart's intent and structure without pixels
auditChart
Public profile only: runs design, accessibility and mobile checks with ranked findings
getChartSchema
Public profile only: returns prop-schema guidance for a component

Resources 13

semiotic://build-info
Package version and build details
semiotic://tasks
Index of task packets
semiotic://tasks/{taskId}
One task packet
semiotic://schema
Full component schema
semiotic://artifact-contract-schema
Schema of the artifact contract
semiotic://schema-index
Index of component schemas
semiotic://schema/{component}
One component's schema
semiotic://components
Component index with renderable status
semiotic://surface-manifest
Manifest of the AI-facing surface
semiotic://behavior-contracts
Semantic rules for colours, prop combinations and streaming
semiotic://system-prompt
Packaged guidance for assistants
semiotic://examples
Working chart examples
ui://semiotic/chart-widget.html
ChatGPT Apps widget template used by renderInteractiveChart

Prompts 2

build-semiotic-chart
Step-by-step workflow for building a chart with the tools
debug-semiotic-chart
Workflow for debugging a chart from its component, problem and props

Similar servers