{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "",
    "endpoint": "https://mcp.tabnas.dev/mcp",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/tabnas-mcp.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/tabnas-mcp.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/tabnas-mcp.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 1410,
        "counts": {
          "error": 0,
          "note": 1,
          "warn": 13
        },
        "findings": [
          {
            "rule": "TC11",
            "severity": "warn",
            "tool": "test_grammar",
            "message": "1 parameter without a description: options",
            "fix": "Describe each one: format, units, an example, and what happens when it's left out."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "compare_grammars",
            "message": "a (object with no properties), b (object with no properties), options (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "explain_parse_error",
            "message": "grammar (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "parse",
            "message": "grammar (object with no properties), options (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "test_grammar",
            "message": "grammar (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "validate_grammar",
            "message": "grammar (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "compare_grammars",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "describe_plugin",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"describe\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "explain_parse_error",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"explain\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list_plugins",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "parse",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "test_grammar",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "validate_grammar",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"validate\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC24",
            "severity": "note",
            "message": "7 of 7 tools have no outputSchema",
            "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
          }
        ]
      },
      "checkedAt": "2026-10-04T22:24:59Z",
      "count": 7,
      "note": "answered without the initialize handshake",
      "schemaTokens": 1410,
      "status": "ok",
      "tools": [
        {
          "name": "parse",
          "description": "Parse input with the tabnas engine. Returns {ok:true, tree} or, on parse failure, {ok:false, diagnostic} — the structured diagnostic described by resource tabnas://schema/diagnostic. An invalid grammar is rejected as {ok:false, errors:[{path,message}]}. Without a grammar the bare engine is used, which defines no rules and produces an undefined tree for every input.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "grammar": {
                "description": "Serialized GrammarSpec (pure JSON, no functions). Schema: resource tabnas://schema/grammar. Grammars are validated before use; a `ref` key or a non-builtin function reference is rejected.",
                "type": "object"
              },
              "input": {
                "description": "Source text to parse.",
                "type": "string"
              },
              "options": {
                "description": "TabnasOptions applied to the fresh instance before the grammar. Data only: a plugins entry is rejected.",
                "type": "object"
              }
            },
            "required": [
              "input"
            ],
            "type": "object"
          }
        },
        {
          "name": "validate_grammar",
          "description": "Validate a serialized GrammarSpec. Structural validation against the bundled grammar schema, an engine load in a fresh instance, and a check that every rule reference (`p`, `r`) names a rule the grammar actually defines — a dangling reference loads cleanly and then fails at parse time with `unknown_rule`. Returns {ok:true, v} (v = declared builtin config-schema version, absent means 1) or {ok:false, errors:[{path,message}]}. Security: a grammar carrying a `ref` key, or any function reference that is not a $-suffixed engine builtin, is rejected — validating a grammar never runs supplied code.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "grammar": {
                "description": "Serialized GrammarSpec (pure JSON, no functions). Schema: resource tabnas://schema/grammar. Grammars are validated before use; a `ref` key or a non-builtin function reference is rejected.",
                "type": "object"
              }
            },
            "required": [
              "grammar"
            ],
            "type": "object"
          }
        },
        {
          "name": "explain_parse_error",
          "description": "Parse input and explain the failure. Returns {failed:false} when the input parses; otherwise {failed:true, diagnostic, registry} where registry is the error-code registry entry {code,message,hint} for the diagnostic code (resource tabnas://errors), or null for a code the bundled registry does not know (e.g. a plugin-declared code).",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "grammar": {
                "description": "Serialized GrammarSpec (pure JSON, no functions). Schema: resource tabnas://schema/grammar. Grammars are validated before use; a `ref` key or a non-builtin function reference is rejected.",
                "type": "object"
              },
              "input": {
                "description": "Source text to parse.",
                "type": "string"
              }
            },
            "required": [
              "input"
            ],
            "type": "object"
          }
        },
        {
          "name": "test_grammar",
          "description": "Run TSV fixture content against a grammar in a fresh instance, using the fleet fixture convention (@tabnas/support): line 1 is a header, the input column is escape-decoded, the expected column is JSON or ERROR / ERROR:\u003ccode\u003e. Returns {pass, fail, rows:[{row,input,expected,got,ok}]}. Refuses more than 10000 rows.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "grammar": {
                "description": "Serialized GrammarSpec (pure JSON, no functions). Schema: resource tabnas://schema/grammar. Grammars are validated before use; a `ref` key or a non-builtin function reference is rejected.",
                "type": "object"
              },
              "options": {
                "additionalProperties": false,
                "properties": {
                  "expectedCol": {
                    "description": "Expected column, by position or header name. Default 1.",
                    "type": [
                      "integer",
                      "string"
                    ]
                  },
                  "inputCol": {
                    "description": "Input column, by position or header name. Default 0.",
                    "type": [
                      "integer",
                      "string"
                    ]
                  }
                },
                "type": "object"
              },
              "spec": {
                "description": "TSV fixture content (not a path).",
                "type": "string"
              }
            },
            "required": [
              "spec"
            ],
            "type": "object"
          }
        },
        {
          "name": "list_plugins",
          "description": "List every bundled tabnas plugin descriptor (tabnas.plugin.json of each fleet repo), sorted by name. Returns {plugins:[...]}.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "describe_plugin",
          "description": "The full descriptor for one plugin, by package name ('@tabnas/csv') or bare fleet name ('csv'). Unknown names get {ok:false, errors} naming the known plugins.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "Plugin name.",
                "type": "string"
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          }
        },
        {
          "name": "compare_grammars",
          "description": "Grammar compatibility (AX plan Phase 5): does candidate grammar B still accept what baseline A accepted, and does it build the same tree for inputs both accept? Returns EVIDENCE AND CONFIDENCE, never a bare verdict: {normalForm, proven[], observed[], changes[], counterexamples[], confidence, why}. confidence:'low' with a stated reason is a successful run, not a failure — language inclusion is undecidable in general, so anything outside the decidable subset is reported not-proven rather than incompatible. Supply `corpus` (real inputs) for the tier that measures what your documents actually do.",
          "inputSchema": {
            "additionalProperties": false,
            "properties": {
              "a": {
                "description": "Baseline grammar: the serialized GrammarSpec already deployed.",
                "type": "object"
              },
              "b": {
                "description": "Candidate grammar: the serialized GrammarSpec proposed to replace it.",
                "type": "object"
              },
              "corpus": {
                "description": "Inputs to replay through both grammars, comparing acceptance and tree shape.",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "depth": {
                "description": "Derivation depth for generated inputs (default 3).",
                "maximum": 5,
                "minimum": 0,
                "type": "integer"
              },
              "options": {
                "description": "TabnasOptions applied to both instances.",
                "type": "object"
              }
            },
            "required": [
              "a",
              "b"
            ],
            "type": "object"
          }
        }
      ]
    },
    "name": "tabnas",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": [
      {
        "registryType": "npm",
        "identifier": "@tabnas/mcp",
        "version": "0.1.17",
        "transport": "stdio"
      }
    ],
    "pageJsonUrl": "https://www.anchorterminal.com/tools/tabnas-mcp.json",
    "popularity": {
      "githubStars": 0,
      "npmWeekly": 174
    },
    "registryName": "dev.tabnas/mcp",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://mcp.tabnas.dev/mcp"
      }
    ],
    "repository": "https://github.com/tabnas/mcp",
    "reviewed": false,
    "slug": "tabnas-mcp",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=dev.tabnas/mcp",
    "summary": "Seven tools over the tabnas parsing engine: parse, validate, diagnose, fixtures, compare.",
    "updatedAt": "2026-10-03T20:43:11Z",
    "url": "https://www.anchorterminal.com/tools/tabnas-mcp",
    "vendor": "tabnas.dev",
    "vendorUrl": "https://tabnas.dev/mcp",
    "version": "0.1.17",
    "websiteUrl": "https://tabnas.dev/mcp",
    "where": "both",
    "why": [
      "vendor"
    ]
  }
}
