{
  "data": {
    "tool": {
      "category": "infrastructure",
      "endpoint": "https://mcp.rationalbloks.com/",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/rationalbloks-mcp.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/rationalbloks-mcp.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/rationalbloks-mcp.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 13624,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 17
          },
          "findings": [
            {
              "rule": "TC07",
              "severity": "warn",
              "tool": "create_graph_project",
              "message": "the description is about 648 tokens",
              "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
            },
            {
              "rule": "TC07",
              "severity": "warn",
              "tool": "create_project",
              "message": "the description is about 653 tokens",
              "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
            },
            {
              "rule": "TC07",
              "severity": "warn",
              "tool": "patch_schema",
              "message": "the description is about 505 tokens",
              "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "bulk_create_graph_nodes",
              "message": "nodes[].data (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "bulk_create_graph_relationships",
              "message": "relationships[].data (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_graph_node",
              "message": "data (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_graph_project",
              "message": "schema (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_graph_relationship",
              "message": "data (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "create_project",
              "message": "schema (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "patch_schema",
              "message": "operations[] (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "search_graph_nodes",
              "message": "filters (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "update_graph_node",
              "message": "data (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "update_graph_schema",
              "message": "schema (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC13",
              "severity": "warn",
              "tool": "update_schema",
              "message": "schema (object with no properties)",
              "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
            },
            {
              "rule": "TC21",
              "severity": "warn",
              "tool": "delete_project",
              "message": "described almost the same as delete_graph_project (92% of the same words)",
              "fix": "Say in each description when to use it instead of the other."
            },
            {
              "rule": "TC21",
              "severity": "warn",
              "tool": "deploy_production",
              "message": "described almost the same as deploy_graph_production (83% of the same words)",
              "fix": "Say in each description when to use it instead of the other."
            },
            {
              "rule": "TC23",
              "severity": "warn",
              "message": "50 tools",
              "fix": "Offer a smaller default toolset and let clients opt into the rest."
            },
            {
              "rule": "TC24",
              "severity": "note",
              "message": "50 of 50 tools have no outputSchema",
              "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
            }
          ]
        },
        "checkedAt": "2026-10-03T22:16:31Z",
        "count": 50,
        "schemaTokens": 13624,
        "status": "ok",
        "tools": [
          {
            "name": "list_projects",
            "title": "List Projects",
            "description": "List all your RationalBloks projects with their status and URLs",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project",
            "title": "Get Project Details",
            "description": "Get detailed information about a specific project",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_schema",
            "title": "Get Project Schema",
            "description": "Get the JSON schema definition of a project in FLAT format. Returns the schema structure where each table name maps directly to field definitions. This is the same format required for create_project and update_schema. USE CASES: Review current schema before making updates, copy schema as template for new projects, verify schema structure after deployment, learn the correct schema format by example. The returned schema will be in FLAT format: {table_name: {field_name: {type, properties}}}. The response also says whether this saved schema is the deployed one: saved_schema_deployed is true when the last deploy applied it, false when it was saved after the last deploy (undeployed_changes then lists what deploying it would change), and null when no deployed schema is on record. A LARGE SCHEMA: pass tables or fields to read only the part you are about to change — the answer's 'version' is the whole schema's either way, so a slice is enough to patch it with patch_schema(expected_version=...).",
            "inputSchema": {
              "properties": {
                "fields": {
                  "description": "Read only these fields, each written 'table.field' (e.g. [\"parameters.is_clock\"]); their table's own keys come with them.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "tables": {
                  "description": "Read only these tables, whole (e.g. [\"parameters\"]). A table the schema does not hold is refused.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_user_info",
            "title": "Get User Info",
            "description": "Get information about the authenticated user",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_clusters",
            "title": "List Resource Pools",
            "description": "List your registered BYOC resource pools (client-owned Kubernetes clusters). Each returned cluster has an 'id' you MUST pass as create_project's cluster_id to deploy a project onto your own infrastructure — owned hosting is retired, so every project we operate runs on your own cluster. Registering a pool is a UI action (create a bare Ubuntu box, authorise the key we generate, then we provision it into a cluster automatically) — this tool only lists pools you already registered, it never handles cluster credentials.",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_job_status",
            "title": "Get Job Status",
            "description": "Check the status of a job (a create, deploy, promotion, rollback or deletion). STATUS VALUES: pending (queued), processing (in progress), completed (success), failed. Call it until the status is completed or failed: every job ends, since a job whose server stopped is failed within about three minutes, and a deploy can take up to 15 minutes. If status is 'failed', read failure_side and error: 'customer' means the project's input is proven the cause (an invalid schema, data the new schema does not fit, a change the resource pool cannot hold), and error says what to change; 'platform' means no input of the project is known to cause it: report it to RationalBloks rather than changing the schema.",
            "inputSchema": {
              "properties": {
                "job_id": {
                  "description": "Job ID returned from deployment operations",
                  "type": "string"
                }
              },
              "required": [
                "job_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_project_jobs",
            "title": "List Project Jobs",
            "description": "List a project's jobs, newest first: every create, deploy, promotion, rollback, resource change and module operation, each with its status, error, failure_side and when it started and ended. A job's record is kept for the life of the project, so this is how to find out what an operation did when you no longer have its job_id (after an interruption, or in a later session): the first job of the job_type you want is the latest. Read older jobs a page at a time with offset; a page shorter than limit is the last.",
            "inputSchema": {
              "properties": {
                "limit": {
                  "description": "Max jobs to return (1-1000, default 100)",
                  "type": "integer"
                },
                "offset": {
                  "description": "Jobs to skip, newest first (default 0)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_info",
            "title": "Get Project Info",
            "description": "Get detailed project info including deployment status and resource usage. DEPLOYMENT STATUS: Running (healthy), Pending (starting), CrashLoopBackOff (init container failed - usually schema format error), ImagePullBackOff (image build failed). TROUBLESHOOTING: If status is CrashLoopBackOff, the schema is likely in wrong format (nested 'fields' key or missing 'type' properties). Use get_schema to review current schema. If replicas show 0/2, the init container (migration runner) is failing. This is almost always a schema format issue. RETURNS THE LIVE API URL: staging.url and production.url carry the deployed base URL for each environment (append /docs for the interactive OpenAPI docs); github.url is the generated repository. create_project does NOT return a URL, so this is the tool to call once get_job_status reports the deployment finished.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_version_history",
            "title": "Get Version History",
            "description": "Get the deployment and version history (git commits) for a project. Shows all schema changes with commit SHA, timestamp, and message. USE CASES: Review what changed between deployments, find the last working version before issues started, get commit SHA for rollback_project.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_template_schemas",
            "title": "Get Template Schemas",
            "description": "Get pre-built template schemas for common use cases. ⭐ USE THIS FIRST when creating a new project! Templates show the CORRECT schema format with: proper FLAT structure (no 'fields' nesting), every field has a 'type' property, foreign key relationships configured correctly, best practices for field naming and types. Available templates: Start from Scratch (every field type), Team Collaboration (workspaces, channels, messages, tasks), E-Commerce Store (customer profiles, products, orders and their line items, reviews, shipments). Each entry's 'schema' goes to create_project as is or adapted; its 'tables' notes say how each table is authorized. TIP: Study these templates to understand the correct schema format before creating custom schemas.",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_schema_reference",
            "title": "Get Schema Features Reference",
            "description": "Get the reference for ADVANCED schema features the templates do not show — read this before adding authorization or derived fields to a schema. Covers: __policy__ (relationship-based read/write authorization with single- and multi-hop membership paths, and the rules that decide whether adopting it is safe — it replaces creator-ownership per table and fails closed on a null link), computed columns (read-only values derived from other columns), __constraints__ (composite uniqueness), __audit__ (append-only audit log), __admin_write__ (a table only admins write), how user foreign keys are attributed on create, and reading many rows in one request with \u003cfield\u003e__in=a,b,c (the values separated by commas only).",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_subscription_status",
            "title": "Get Subscription Status",
            "description": "Get your subscription tier, limits, and usage",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_usage",
            "title": "Get Project Usage",
            "description": "Get resource usage metrics (CPU, memory) for a project",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_project_storage_usage",
            "title": "Get Project Storage Usage",
            "description": "Get object-storage usage for a project: file count and bytes used against the plan limits.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: production)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_project_files",
            "title": "List Project Files",
            "description": "List a project's uploaded files (metadata + public URLs), most recent first. Inspection only — files are not streamed through MCP.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: production)",
                  "type": "string"
                },
                "limit": {
                  "description": "Max files to return (1-1000, default 100)",
                  "type": "integer"
                },
                "offset": {
                  "description": "Pagination offset (default 0)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_schema_at_version",
            "title": "Get Schema at Version",
            "description": "Get the schema as it was at a specific version/commit",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "version": {
                  "description": "Commit SHA of the version",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_project",
            "title": "Create Project",
            "description": "Create a new RationalBloks project from a JSON schema.\n\n⚠️ CRITICAL RULES - READ BEFORE CREATING SCHEMA:\n\n1. FLAT FORMAT (REQUIRED):\n   ✅ CORRECT: {users: {email: {type: \"string\", max_length: 255}}}\n   ❌ WRONG: {users: {fields: {email: {type: \"string\"}}}}\n   DO NOT nest under 'fields' key!\n\n2. FIELD TYPE REQUIREMENTS:\n   • string: MUST have \"max_length\" (e.g., max_length: 255)\n   • decimal: MUST have \"precision\" and \"scale\" (e.g., precision: 10, scale: 2)\n   • datetime: Use \"datetime\" NOT \"timestamp\"\n   • ALL fields: MUST have \"type\" property\n\n3. AUTOMATIC FIELDS (DON'T define):\n   • id (uuid, primary key)\n   • created_at (datetime)\n   • updated_at (datetime)\n\n4. USER AUTHENTICATION:\n   ❌ NEVER create \"users\", \"customers\", \"employees\" tables with email/password\n   ✅ USE built-in app_users table\n\n   Example:\n   {\n     \"employee_profiles\": {\n       \"user_id\": {type: \"uuid\", foreign_key: \"app_users.id\", required: true},\n       \"department\": {type: \"string\", max_length: 100}\n     }\n   }\n\n5. AUTHORIZATION:\n   Add user_id → app_users.id to enable \"only see your own data\"\n\n   Example:\n   {\n     \"orders\": {\n       \"user_id\": {type: \"uuid\", foreign_key: \"app_users.id\"},\n       \"total\": {type: \"decimal\", precision: 10, scale: 2}\n     }\n   }\n\n6. FIELD OPTIONS:\n   • required: true/false\n   • unique: true/false\n   • default: any value\n   • enum: [\"val1\", \"val2\"]\n   • foreign_key: \"table.id\"\n\nAVAILABLE TYPES: string, text, integer, decimal, boolean, uuid, date, datetime, json, uuid_array, integer_array, text_array, float_array\n\n   Array types store PostgreSQL native arrays with automatic GIN indexing:\n   • uuid_array: UUID[] — for sets of references (e.g., tensor coordinates)\n   • integer_array: BIGINT[] — for dimension indices, integer sets\n   • text_array: TEXT[] — for tags, categories, label sets\n   • float_array: DOUBLE PRECISION[] — for weight vectors, scores\n   GIN-indexed operators: @\u003e (contains), \u003c@ (contained_by), \u0026\u0026 (overlaps)\n\nBACKEND ENGINE:\n• python (default): FastAPI backend — mature, full-featured\n• rust: Axum backend — faster cold starts, lower memory, high performance\n\nWORKFLOW:\n1. Use get_template_schemas FIRST to see valid examples\n2. Create schema following ALL rules above\n3. Call this tool (optionally choose backend_type: \"python\" or \"rust\")\n4. Monitor with get_job_status (2-5 min deployment)\n\nAfter creation, use get_job_status with returned job_id to monitor deployment. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "backend_type": {
                  "description": "Backend engine: 'python' (FastAPI, default) or 'rust' (Axum, faster). Default: python",
                  "enum": [
                    "python",
                    "rust"
                  ],
                  "type": "string"
                },
                "cluster_id": {
                  "description": "REQUIRED — BYOC resource pool ID (from list_clusters) to deploy this project onto your own cluster. Owned hosting is retired: a project we operate must run on your own infrastructure. Register a pool via the Resource Pools UI first, then pass its id here.",
                  "type": "string"
                },
                "name": {
                  "description": "Project name",
                  "type": "string"
                },
                "schema": {
                  "description": "JSON schema in FLAT format (table_name → field_name → properties). Every field MUST have a 'type' property. Use get_template_schemas to see valid examples.",
                  "type": "object"
                }
              },
              "required": [
                "name",
                "schema",
                "cluster_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "update_schema",
            "title": "Update Schema",
            "description": "Update a project's schema (saves to database, does NOT deploy).\n\n⚠️ CRITICAL: Follow ALL rules from create_project:\n• FLAT format (no 'fields' nesting)\n• string: max_length (default 255)\n• decimal: precision + scale (default 10, 2)\n• Use \"datetime\" NOT \"timestamp\"\n• DON'T define: id, created_at, updated_at\n• NEVER create users/customers/employees tables (use app_users)\n\n⚠️ MIGRATION RULES:\n• New fields MUST be \"required\": false OR have \"default\" value\n• Cannot add required field without default to existing tables\n• Safe: {new_field: {type: \"string\", max_length: 100, required: false}}\n\nWORKFLOW:\n1. Use get_schema to see current schema\n2. Modify following ALL rules\n3. (optional) Call update_schema with dry_run=true to preview the migration first\n4. Call update_schema (saves only)\n5. Call deploy_staging to apply changes\n6. Monitor with get_job_status\n\nCHANGING PART OF A SCHEMA: use patch_schema. This tool replaces the WHOLE schema, so it is for a\nnew data model or a template; sending back a large schema to change one field risks changing\nsomething else on the way.\n\nDRY RUN: pass dry_run=true to save nothing and read back 'diff' — every property this schema changes\nin the saved one, so an accidentally changed description, default, enum or computed case shows up —\nand 'plan', the migration a deploy would then run, with destructive steps flagged.\n\nNOTE: Without dry_run this only saves the schema. You MUST call deploy_staging afterwards to apply changes.",
            "inputSchema": {
              "properties": {
                "dry_run": {
                  "description": "Save nothing: answer the property-level diff against the saved schema and the migration plan a deploy would run.",
                  "type": "boolean"
                },
                "expected_version": {
                  "description": "The 'version' a get_schema read answered. The save is refused (409) when the saved schema changed since, so two editors never overwrite each other silently.",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "schema": {
                  "description": "New JSON schema in FLAT format (table_name → field_name → properties). Every field MUST have a 'type' property.",
                  "type": "object"
                }
              },
              "required": [
                "project_id",
                "schema"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "patch_schema",
            "title": "Patch Schema",
            "description": "Change PART of a project's schema (saves to database, does NOT deploy).\n\nSend only the change. The server applies it to the saved schema, in order and all together, and keeps\nevery table and field it does not touch — including their identity, so a rename stays a rename and the\ncolumn keeps its data.\n\nOPERATIONS (each one small object, applied in the order given):\n• {\"op\": \"add_table\", \"table\": \"clocks\", \"definition\": {...}}      new table, same FLAT rules as create_project\n• {\"op\": \"drop_table\", \"table\": \"clocks\"}\n• {\"op\": \"rename_table\", \"table\": \"clocks\", \"to\": \"timers\"}\n• {\"op\": \"add_field\", \"table\": \"assets\", \"field\": \"serial\", \"definition\": {\"type\": \"string\", \"max_length\": 64}}\n• {\"op\": \"drop_field\", \"table\": \"parameters\", \"field\": \"is_clock\"}\n• {\"op\": \"rename_field\", \"table\": \"parameters\", \"field\": \"is_clock\", \"to\": \"clock_kind\"}\n• {\"op\": \"set_field\", \"table\": \"assets\", \"field\": \"name\", \"properties\": {\"max_length\": 300}}   merges; a property set to null is removed\n• {\"op\": \"set_table\", \"table\": \"assets\", \"properties\": {\"__audit__\": true}}   __policy__, __constraints__, __audit__, __admin_write__\n\nALL OR NOTHING: an operation that cannot be applied — a table or field that is not there, a name\nalready taken, a schema the deploy would refuse — refuses the whole patch, naming the operation, and\nnothing is saved.\n\nEVERY ANSWER IS A DIFF: 'applied' (what each operation did), 'diff' (every changed property by path),\n'summary' and 'plan' (the migration a deploy would then run), and 'version' (the schema's version\nafter the change). You never need to read the whole schema back to see what you did.\n\nWORKFLOW:\n1. get_schema with tables/fields to read the part you are changing (its 'version' is the whole schema's)\n2. patch_schema with dry_run=true: check 'diff' and 'plan'\n3. patch_schema with the same operations (pass expected_version to be refused if someone else saved meanwhile)\n4. deploy_staging (confirm_destructive=true when the plan drops data), then get_job_status",
            "inputSchema": {
              "properties": {
                "dry_run": {
                  "description": "Save nothing: answer what the operations did, the diff and the migration plan a deploy would run.",
                  "type": "boolean"
                },
                "expected_version": {
                  "description": "The 'version' a get_schema read answered. The patch is refused (409) when the saved schema changed since, so two editors never overwrite each other silently.",
                  "type": "string"
                },
                "operations": {
                  "description": "The operations, applied in order and all together. See the tool description for every op and its fields.",
                  "items": {
                    "type": "object"
                  },
                  "type": "array"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "operations"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "deploy_staging",
            "title": "Deploy to Staging",
            "description": "Deploy a project to the staging environment. This triggers: (1) Schema validation, (2) Docker image build, (3) GitHub commit, (4) Kubernetes deployment, (5) Database migrations. The operation is ASYNCHRONOUS - it returns immediately with a job_id. Use get_job_status with the job_id to monitor progress. Deployment typically takes 2-5 minutes depending on schema complexity. If deployment fails, read the job's error first: one that starts with 'RationalBloks platform error' is the platform's, not the schema's. Otherwise check: (1) Schema format is FLAT (no 'fields' nesting), (2) Every field has a 'type' property, (3) Foreign keys reference existing tables, (4) No PostgreSQL reserved words in table/field names. Use get_project_info to see if the deployment succeeded. A deploy that drops data is refused until you pass confirm_destructive=true after reviewing the plan. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "confirm_destructive": {
                  "description": "Set true only after reviewing the plan: a deploy that drops tables, columns, entities, relationships or fields is refused without it",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "deploy_production",
            "title": "Deploy to Production",
            "description": "Promote staging to production (requires paid plan) A deploy that drops data is refused until you pass confirm_destructive=true after reviewing the plan. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "confirm_destructive": {
                  "description": "Set true only after reviewing the plan: a deploy that drops tables, columns, entities, relationships or fields is refused without it",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "delete_project",
            "title": "Delete Project",
            "description": "Delete a project (removes GitHub repo, K8s deployments, and database). It runs as a job: poll the returned job_id with get_job_status until it is completed. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "rollback_project",
            "title": "Rollback Project",
            "description": "Rollback a project to a previous version. ⚠️ WARNING: This reverts schema AND code to the specified commit. Database data is NOT rolled back. Use get_version_history to find the commit SHA of the version you want to rollback to. After rollback, use get_job_status to monitor the redeployment. Rollback is useful when a schema change breaks deployment. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "version": {
                  "description": "Commit SHA or version to rollback to",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "rename_project",
            "title": "Rename Project",
            "description": "Rename a project (changes display name, not project_code)",
            "inputSchema": {
              "properties": {
                "name": {
                  "description": "New display name for the project",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "name"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_graph_schema",
            "title": "Get Graph Schema",
            "description": "Get the graph schema definition of a project. Returns the hierarchical schema with nodes (entities) and relationships. Graph schemas define entity hierarchies and typed relationships — a different format than relational flat-table schemas. The response also says whether this saved schema is the deployed one: saved_schema_deployed is true when the last deploy applied it, false when it was saved after the last deploy (undeployed_changes then lists what deploying it would change), and null when no deployed schema is on record.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_template_schemas",
            "title": "Get Graph Template Schemas",
            "description": "Get pre-built graph template schemas for common use cases. ⭐ USE THIS FIRST when creating a new graph project! Templates show the CORRECT graph schema format with: proper node definitions (description, flat_labels, schema with flat field definitions), relationship configurations (from, to, cardinality, data_schema), and hierarchical entity nesting. Available templates: Start from Scratch (hierarchy, flat labels, every field type), Social Network (people, organizations, content, follows), Knowledge Graph (topic hierarchy, articles, authors, concepts), Product Catalog (products, categories, suppliers, reviews). Each entry's 'schema' goes to create_graph_project as is or adapted. TIP: Study these templates to understand the correct graph schema format before creating custom schemas.",
            "inputSchema": {
              "properties": {},
              "required": [],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_version_history",
            "title": "Get Graph Version History",
            "description": "Get the deployment and version history for a graph project. Shows all schema changes with commit SHAs, timestamps, version numbers, and messages. Use this to find a specific version for rollback operations.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_schema_at_version",
            "title": "Get Graph Schema at Version",
            "description": "Get the graph schema as it existed at a specific version/commit. Use get_graph_version_history to find commit SHAs. Useful for comparing schemas across versions or auditing changes.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "version": {
                  "description": "Commit SHA of the version to retrieve",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_project_info",
            "title": "Get Graph Project Info",
            "description": "Get detailed graph project information including Kubernetes deployment status, Neo4j database health, pod status, and resource usage. Use this after deployment to verify the graph project is running correctly.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "create_graph_project",
            "title": "Create Graph Project",
            "description": "Create a new Neo4j graph database project from a hierarchical JSON schema.\n\n⚠️ GRAPH SCHEMA FORMAT — READ BEFORE CREATING:\n\nGraph schemas define nodes (entities) and relationships, NOT flat database tables.\nEach field is a dict with \"type\" and optional \"required\": true (defaults to false).\n\nSCHEMA STRUCTURE:\n{\n  \"nodes\": {\n    \"EntityName\": {\n      \"description\": \"What this entity represents\",\n      \"flat_labels\": [\"AdditionalLabel\"],\n      \"schema\": {\n        \"field_name\": {\"type\": \"string\", \"required\": true},\n        \"other_field\": {\"type\": \"integer\"}\n      }\n    }\n  },\n  \"relationships\": {\n    \"RELATIONSHIP_TYPE\": {\n      \"from\": \"EntityName\",\n      \"to\": \"OtherEntity\",\n      \"cardinality\": \"MANY_TO_MANY\",\n      \"data_schema\": {\n        \"field_name\": {\"type\": \"date\"}\n      }\n    }\n  }\n}\n\nFIELD TYPES: string, integer, float, boolean, date, json\n\nCARDINALITY OPTIONS: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY\n\nHIERARCHICAL NODES:\nNest entities inside parent entities to create type hierarchies.\nChild entities inherit parent labels automatically.\n\nExample:\n{\n  \"nodes\": {\n    \"Animal\": {\n      \"description\": \"Base animal entity\",\n      \"flat_labels\": [\"LivingThing\"],\n      \"schema\": {\n        \"name\": {\"type\": \"string\", \"required\": true},\n        \"habitat\": {\"type\": \"string\"}\n      },\n      \"Dog\": {\n        \"description\": \"A dog (inherits Animal labels)\",\n        \"flat_labels\": [\"Pet\"],\n        \"schema\": {\n          \"breed\": {\"type\": \"string\", \"required\": true},\n          \"trained\": {\"type\": \"boolean\"}\n        }\n      }\n    }\n  },\n  \"relationships\": {\n    \"OWNS\": {\n      \"from\": \"Person\",\n      \"to\": \"Animal\",\n      \"cardinality\": \"ONE_TO_MANY\"\n    }\n  }\n}\n\nRULES:\n1. \"nodes\" key is REQUIRED — must contain at least one entity\n2. Each entity needs \"description\" and \"schema\" with field definitions\n3. Each field is {\"type\": \"...\", \"required\": true/false} — required defaults to false\n4. Relationship \"from\"/\"to\" must reference defined node names\n5. Relationship types should be UPPER_SNAKE_CASE\n6. Entity names should be PascalCase\n7. Automatic fields (id, created_at, updated_at) are NOT needed\n8. Use get_graph_template_schemas FIRST to see valid examples\n\nWORKFLOW:\n1. Use get_graph_template_schemas to see valid examples\n2. Create schema following the rules above\n3. Call this tool\n4. Monitor with get_job_status (2-5 min deployment)\n\nAfter creation, use get_job_status with returned job_id to monitor deployment. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "cluster_id": {
                  "description": "REQUIRED — BYOC resource pool ID (from list_clusters) to deploy this graph project onto your own cluster. Owned hosting is retired: a project we operate must run on your own infrastructure. Register a pool via the Resource Pools UI first, then pass its id here.",
                  "type": "string"
                },
                "name": {
                  "description": "Project name",
                  "type": "string"
                },
                "schema": {
                  "description": "Graph schema with 'nodes' and optionally 'relationships' keys. Use get_graph_template_schemas to see valid examples.",
                  "type": "object"
                }
              },
              "required": [
                "name",
                "schema",
                "cluster_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "update_graph_schema",
            "title": "Update Graph Schema",
            "description": "Update a graph project's schema (saves to database, does NOT deploy).\n\n⚠️ Follow ALL rules from create_graph_project:\n• Must have \"nodes\" key with at least one entity\n• Each entity needs \"description\" and \"schema\" with field definitions\n• Each field is {\"type\": \"...\", \"required\": true/false} — required defaults to false\n• Relationships need \"from\", \"to\", and \"cardinality\"\n• Field types: string, integer, float, boolean, date, json\n• Relationship types should be UPPER_SNAKE_CASE\n• Entity names should be PascalCase\n\nWORKFLOW:\n1. Use get_graph_schema to see current schema\n2. Modify following all rules\n3. Call update_graph_schema (saves only)\n4. Call deploy_graph_staging to apply changes\n5. Monitor with get_job_status\n\nDRY RUN: pass dry_run=true to preview what a deploy WOULD change (renames, deletions) without saving.\n\nNOTE: This only saves the schema. You MUST call deploy_graph_staging afterwards to deploy.",
            "inputSchema": {
              "properties": {
                "dry_run": {
                  "description": "Preview the planned migration (renames/deletions) without saving or deploying. Nothing is applied.",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "schema": {
                  "description": "New graph schema with 'nodes' and optionally 'relationships' keys.",
                  "type": "object"
                }
              },
              "required": [
                "project_id",
                "schema"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "deploy_graph_staging",
            "title": "Deploy Graph to Staging",
            "description": "Deploy a graph project to the staging environment. This triggers: (1) Schema validation, (2) Neo4j entity code generation, (3) Docker image build, (4) GitHub commit, (5) Kubernetes deployment with Neo4j instance. The operation is ASYNCHRONOUS — returns immediately with a job_id. Use get_job_status to monitor progress. Deployment typically takes 2-5 minutes. Use get_graph_project_info to verify deployment succeeded. A deploy that drops data is refused until you pass confirm_destructive=true after reviewing the plan. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "confirm_destructive": {
                  "description": "Set true only after reviewing the plan: a deploy that drops tables, columns, entities, relationships or fields is refused without it",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "deploy_graph_production",
            "title": "Deploy Graph to Production",
            "description": "Promote graph staging to production. Creates a separate production Neo4j instance with its own credentials and database. Requires paid plan. A deploy that drops data is refused until you pass confirm_destructive=true after reviewing the plan. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "confirm_destructive": {
                  "description": "Set true only after reviewing the plan: a deploy that drops tables, columns, entities, relationships or fields is refused without it",
                  "type": "boolean"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "delete_graph_project",
            "title": "Delete Graph Project",
            "description": "Delete a graph project (removes GitHub repo, K8s deployments, Neo4j database, and credentials). It runs as a job: poll the returned job_id with get_job_status until it is completed. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "rollback_graph_project",
            "title": "Rollback Graph Project",
            "description": "Rollback a graph project to a previous version. ⚠️ WARNING: This reverts schema AND code to the specified commit. Neo4j data is NOT rolled back. Use get_graph_version_history to find the commit SHA of the version you want to rollback to. After rollback, the graph API will be redeployed with the old schema. One operation runs on a project at a time: while another runs, the call is refused and the refusal names the running job; wait for it with get_job_status, then call again. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "version": {
                  "description": "Commit SHA to rollback to",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "version"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "create_graph_node",
            "title": "Create Graph Node",
            "description": "Create a single node in a deployed graph project.\n\nREQUIRES: Project must be deployed (use deploy_graph_staging first).\n\nThe entity_type must match an entity key from the project schema.\nUse get_graph_data_schema to see available entity types and their fields.\n\nExample:\n  entity_type: \"person\"\n  entity_id: \"alan-turing-001\"\n  data: {\"name\": \"Alan Turing\", \"birth_year\": 1912, \"field\": \"Computer Science\"}\n\nThe entity_id is your unique identifier — use meaningful IDs for knowledge graphs.",
            "inputSchema": {
              "properties": {
                "data": {
                  "description": "Node properties matching the entity schema",
                  "type": "object"
                },
                "entity_id": {
                  "description": "Unique identifier for the node",
                  "type": "string"
                },
                "entity_type": {
                  "description": "Entity key (e.g., 'person', 'concept')",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "entity_id",
                "data"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_graph_node",
            "title": "Get Graph Node",
            "description": "Get a specific node by its entity_id from a deployed graph project. Returns all node properties including created_at and updated_at timestamps.",
            "inputSchema": {
              "properties": {
                "entity_id": {
                  "description": "The node's entity_id",
                  "type": "string"
                },
                "entity_type": {
                  "description": "Entity key (e.g., 'person', 'concept')",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "entity_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "list_graph_nodes",
            "title": "List Graph Nodes",
            "description": "List nodes of a specific entity type from a deployed graph project. Supports pagination with limit/offset. Returns nodes ordered by creation date (newest first).",
            "inputSchema": {
              "properties": {
                "entity_type": {
                  "description": "Entity key (e.g., 'person', 'concept')",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "limit": {
                  "description": "Max results (default: 100, max: 1000)",
                  "type": "integer"
                },
                "offset": {
                  "description": "Pagination offset (default: 0)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "update_graph_node",
            "title": "Update Graph Node",
            "description": "Update properties of an existing node in a deployed graph project. Only send the fields you want to change — unspecified fields remain unchanged.",
            "inputSchema": {
              "properties": {
                "data": {
                  "description": "Properties to update (partial update)",
                  "type": "object"
                },
                "entity_id": {
                  "description": "The node's entity_id",
                  "type": "string"
                },
                "entity_type": {
                  "description": "Entity key (e.g., 'person', 'concept')",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "entity_id",
                "data"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "delete_graph_node",
            "title": "Delete Graph Node",
            "description": "Delete a node and all its relationships from a deployed graph project. ⚠️ This also removes all relationships connected to this node (DETACH DELETE).",
            "inputSchema": {
              "properties": {
                "entity_id": {
                  "description": "The node's entity_id",
                  "type": "string"
                },
                "entity_type": {
                  "description": "Entity key (e.g., 'person', 'concept')",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "entity_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "create_graph_relationship",
            "title": "Create Graph Relationship",
            "description": "Create a relationship between two nodes in a deployed graph project.\n\nThe rel_type must match a relationship key from the project schema.\nUse get_graph_data_schema to see available relationship types.\n\nExample:\n  rel_type: \"authored\"\n  from_id: \"alan-turing-001\"\n  to_id: \"on-computable-numbers-001\"\n  data: {\"year\": 1936}\n\nThe from_id and to_id must be entity_ids of existing nodes.",
            "inputSchema": {
              "properties": {
                "data": {
                  "description": "Relationship properties (optional)",
                  "type": "object"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "from_id": {
                  "description": "Source node entity_id",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "rel_type": {
                  "description": "Relationship key (e.g., 'authored', 'related_to')",
                  "type": "string"
                },
                "to_id": {
                  "description": "Target node entity_id",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "rel_type",
                "from_id",
                "to_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "get_node_relationships",
            "title": "Get Node Relationships",
            "description": "Get all relationships connected to a specific node. Supports direction filtering (incoming, outgoing, both) and relationship type filtering.",
            "inputSchema": {
              "properties": {
                "direction": {
                  "description": "Filter: incoming, outgoing, or both (default: both)",
                  "type": "string"
                },
                "entity_id": {
                  "description": "The node's entity_id",
                  "type": "string"
                },
                "entity_type": {
                  "description": "Entity key of the node",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "rel_type_filter": {
                  "description": "Filter by relationship type (UPPER_SNAKE_CASE)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "entity_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "delete_graph_relationship",
            "title": "Delete Graph Relationship",
            "description": "Delete a specific relationship by its internal ID. Use get_node_relationships to find relationship IDs.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "rel_id": {
                  "description": "Internal relationship ID (from get_node_relationships)",
                  "type": "integer"
                },
                "rel_type": {
                  "description": "Relationship key",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "rel_type",
                "rel_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": true,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "bulk_create_graph_nodes",
            "title": "Bulk Create Graph Nodes",
            "description": "Create multiple nodes at once (up to 500 per call). Uses Neo4j UNWIND for high performance.\n\nEssential for knowledge graph population — create hundreds of entities from a single book chapter or article.\n\nEach node needs: entity_id (unique string) and data (properties dict).\n\nExample:\n  entity_type: \"concept\"\n  nodes: [\n    {\"entity_id\": \"quantum-mechanics-001\", \"data\": {\"name\": \"Quantum Mechanics\", \"field\": \"Physics\"}},\n    {\"entity_id\": \"wave-function-001\", \"data\": {\"name\": \"Wave Function\", \"field\": \"Physics\"}},\n    {\"entity_id\": \"superposition-001\", \"data\": {\"name\": \"Superposition\", \"field\": \"Physics\"}}\n  ]",
            "inputSchema": {
              "properties": {
                "entity_type": {
                  "description": "Entity key for all nodes",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "nodes": {
                  "description": "List of nodes. Each: {entity_id: string, data: {properties}}",
                  "items": {
                    "properties": {
                      "data": {
                        "type": "object"
                      },
                      "entity_id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "entity_id",
                      "data"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "entity_type",
                "nodes"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "bulk_create_graph_relationships",
            "title": "Bulk Create Graph Relationships",
            "description": "Create multiple relationships at once (up to 500 per call). Uses Neo4j UNWIND for high performance.\n\nEssential for connecting knowledge — link hundreds of concepts, people, and events in one operation.\n\nEach relationship needs: from_id, to_id, and optional data (properties).\n\nExample:\n  rel_type: \"related_to\"\n  relationships: [\n    {\"from_id\": \"quantum-mechanics-001\", \"to_id\": \"wave-function-001\", \"data\": {\"strength\": \"strong\"}},\n    {\"from_id\": \"quantum-mechanics-001\", \"to_id\": \"superposition-001\", \"data\": {\"strength\": \"strong\"}}\n  ]",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "rel_type": {
                  "description": "Relationship key for all relationships",
                  "type": "string"
                },
                "relationships": {
                  "description": "List of relationships. Each: {from_id, to_id, data?}",
                  "items": {
                    "properties": {
                      "data": {
                        "type": "object"
                      },
                      "from_id": {
                        "type": "string"
                      },
                      "to_id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "from_id",
                      "to_id"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "required": [
                "project_id",
                "rel_type",
                "relationships"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": false,
              "openWorldHint": true,
              "readOnlyHint": false
            }
          },
          {
            "name": "search_graph_nodes",
            "title": "Search Graph Nodes",
            "description": "Search for nodes by property values in a deployed graph project.\n\nSupports exact match and contains search (prefix value with ~ for contains).\n\nExamples:\n  Exact: filters: {\"name\": \"Alan Turing\"}\n  Contains: filters: {\"name\": \"~turing\"} (case-insensitive)\n  Combined: entity_type: \"person\", filters: {\"field\": \"~physics\"}\n\nWithout entity_type, searches ALL node types.",
            "inputSchema": {
              "properties": {
                "entity_type": {
                  "description": "Entity key to filter by (optional — omit to search all types)",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "filters": {
                  "description": "Property filters. Prefix value with ~ for contains search.",
                  "type": "object"
                },
                "limit": {
                  "description": "Max results (default: 100, max: 1000)",
                  "type": "integer"
                },
                "offset": {
                  "description": "Pagination offset (default: 0)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "filters"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "fulltext_search_graph",
            "title": "Full-Text Search Graph",
            "description": "Search across ALL string properties of ALL nodes in a deployed graph using free-text queries.\n\nUnlike search_graph_nodes (which filters by specific property), this searches every text field at once.\nPerfect for finding knowledge when you don't know which property contains the answer.\n\nExample: query \"quantum\" searches name, description, summary, notes, and all other string fields.\nReturns nodes with _match_fields showing which properties matched.\n\nOptionally filter by entity_type to narrow results.",
            "inputSchema": {
              "properties": {
                "entity_type": {
                  "description": "Entity key to filter by (optional — omit to search all types)",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "limit": {
                  "description": "Max results (default: 50, max: 500)",
                  "type": "integer"
                },
                "offset": {
                  "description": "Pagination offset (default: 0)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "query": {
                  "description": "Search text (case-insensitive, min 2 chars)",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "query"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "traverse_graph",
            "title": "Traverse Graph",
            "description": "Walk the graph from a starting node, discovering connected knowledge.\n\nReturns all nodes reachable within max_depth hops, with their distance from the start.\nEssential for exploring knowledge graphs — find related concepts, trace connections, discover clusters.\n\nExample: Start from \"Alan Turing\", traverse outgoing relationships up to 3 hops deep:\n  start_entity_type: \"person\"\n  start_entity_id: \"alan-turing-001\"\n  max_depth: 3\n  direction: \"outgoing\"\n\nSupports filtering by relationship types and direction.",
            "inputSchema": {
              "properties": {
                "direction": {
                  "description": "Direction: outgoing, incoming, or both (default: both)",
                  "type": "string"
                },
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "limit": {
                  "description": "Max results (default: 100, max: 1000)",
                  "type": "integer"
                },
                "max_depth": {
                  "description": "Maximum traversal depth (default: 3, max: 10)",
                  "type": "integer"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                },
                "relationship_types": {
                  "description": "Filter by relationship types (UPPER_SNAKE_CASE). Omit for all types.",
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "start_entity_id": {
                  "description": "Entity ID of the starting node",
                  "type": "string"
                },
                "start_entity_type": {
                  "description": "Entity key of the starting node",
                  "type": "string"
                }
              },
              "required": [
                "project_id",
                "start_entity_type",
                "start_entity_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_statistics",
            "title": "Get Graph Statistics",
            "description": "Get statistics about a deployed graph: total node count, total relationship count, counts per entity type, counts per relationship type. Essential for understanding the current state of a knowledge graph before adding more data.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          },
          {
            "name": "get_graph_data_schema",
            "title": "Get Graph Data Schema",
            "description": "Get the runtime schema of a DEPLOYED graph project — shows the actual entity types and relationship types available for data operations.\n\nReturns: Available entity keys (for create_graph_node, list_graph_nodes, etc.) and relationship keys (for create_graph_relationship, etc.).\n\n⭐ USE THIS FIRST before creating nodes/relationships to know what entity_type and rel_type values are valid.",
            "inputSchema": {
              "properties": {
                "environment": {
                  "description": "Environment: staging or production (default: staging)",
                  "type": "string"
                },
                "project_id": {
                  "description": "Project ID (UUID)",
                  "type": "string"
                }
              },
              "required": [
                "project_id"
              ],
              "type": "object"
            },
            "annotations": {
              "destructiveHint": false,
              "idempotentHint": true,
              "openWorldHint": false,
              "readOnlyHint": true
            }
          }
        ]
      },
      "name": "RationalBloks",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": [
        {
          "registryType": "pypi",
          "identifier": "rationalbloks-mcp",
          "version": "0.16.0",
          "transport": "stdio"
        }
      ],
      "pageJsonUrl": "https://www.anchorterminal.com/tools/rationalbloks-mcp.json",
      "popularity": {
        "githubStars": 1,
        "pypiWeekly": 213
      },
      "registryName": "com.rationalbloks/mcp",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://mcp.rationalbloks.com/"
        }
      ],
      "repository": "https://github.com/rationalbloks/rationalbloks-mcp",
      "reviewed": false,
      "slug": "rationalbloks-mcp",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.rationalbloks/mcp",
      "summary": "Deploy production REST and Neo4j Graph APIs from JSON schemas in seconds.",
      "updatedAt": "2026-10-07T23:08:10Z",
      "url": "https://www.anchorterminal.com/tools/rationalbloks-mcp",
      "vendor": "rationalbloks.com",
      "vendorUrl": "https://rationalbloks.com",
      "version": "0.16.0",
      "websiteUrl": "",
      "where": "both",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/rationalbloks-mcp",
    "json": "https://www.anchorterminal.com/tools/rationalbloks-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/rationalbloks-mcp.md",
    "slim": "https://www.anchorterminal.com/tools/rationalbloks-mcp.min.md"
  },
  "markdown": "# RationalBloks\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by rationalbloks.com (https://rationalbloks.com)\n- Category: Cloud \u0026 infrastructure (https://www.anchorterminal.com/categories/infrastructure.md)\n- Listed because: It's published in the registry under rationalbloks.com, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Deploy production REST and Neo4j Graph APIs from JSON schemas in seconds.\n\n## Facts\n\n- MCP registry: `com.rationalbloks/mcp` 0.16.0\n- Endpoint: https://mcp.rationalbloks.com/ (streamable HTTP)\n- Package: pypi `rationalbloks-mcp` (stdio)\n- Source: https://github.com/rationalbloks/rationalbloks-mcp\n- PyPI downloads a week: 213\n- GitHub stars: 1\n- Registry entry updated: 2026-10-07\n\n## Tools\n\n- Tools it lists (50, about 13,624 tokens of context, `tools/list` without credentials over MCP 2026-07-28, checked 2026-10-03 22:16 UTC):\n  - `list_projects` (read-only): List all your RationalBloks projects with their status and URLs\n  - `get_project` (read-only): Get detailed information about a specific project\n  - `get_schema` (read-only): Get the JSON schema definition of a project in FLAT format. Returns the schema structure where each table name maps directly to field definitions. This is the…\n  - `get_user_info` (read-only): Get information about the authenticated user\n  - `list_clusters` (read-only): List your registered BYOC resource pools (client-owned Kubernetes clusters). Each returned cluster has an 'id' you MUST pass as create_project's cluster_id to…\n  - `get_job_status` (read-only): Check the status of a job (a create, deploy, promotion, rollback or deletion). STATUS VALUES: pending (queued), processing (in progress), completed (success),…\n  - `list_project_jobs` (read-only): List a project's jobs, newest first: every create, deploy, promotion, rollback, resource change and module operation, each with its status, error, failure_side…\n  - `get_project_info` (read-only): Get detailed project info including deployment status and resource usage. DEPLOYMENT STATUS: Running (healthy), Pending (starting), CrashLoopBackOff (init…\n  - `get_version_history` (read-only): Get the deployment and version history (git commits) for a project. Shows all schema changes with commit SHA, timestamp, and message. USE CASES: Review what…\n  - `get_template_schemas` (read-only): Get pre-built template schemas for common use cases. ⭐ USE THIS FIRST when creating a new project! Templates show the CORRECT schema format with: proper FLAT…\n  - `get_schema_reference` (read-only): Get the reference for ADVANCED schema features the templates do not show — read this before adding authorization or derived fields to a schema. Covers:…\n  - `get_subscription_status` (read-only): Get your subscription tier, limits, and usage\n  - `get_project_usage` (read-only): Get resource usage metrics (CPU, memory) for a project\n  - `get_project_storage_usage` (read-only): Get object-storage usage for a project: file count and bytes used against the plan limits.\n  - `list_project_files` (read-only): List a project's uploaded files (metadata + public URLs), most recent first. Inspection only — files are not streamed through MCP.\n  - `get_schema_at_version` (read-only): Get the schema as it was at a specific version/commit\n  - `create_project` (writes): Create a new RationalBloks project from a JSON schema. ⚠️ CRITICAL RULES - READ BEFORE CREATING SCHEMA: 1. FLAT FORMAT (REQUIRED): ✅ CORRECT: {users: {email:…\n  - `update_schema` (writes): Update a project's schema (saves to database, does NOT deploy). ⚠️ CRITICAL: Follow ALL rules from create_project: • FLAT format (no 'fields' nesting) •…\n  - `patch_schema` (writes): Change PART of a project's schema (saves to database, does NOT deploy). Send only the change. The server applies it to the saved schema, in order and all…\n  - `deploy_staging` (writes): Deploy a project to the staging environment. This triggers: (1) Schema validation, (2) Docker image build, (3) GitHub commit, (4) Kubernetes deployment, (5)…\n  - `deploy_production` (writes): Promote staging to production (requires paid plan) A deploy that drops data is refused until you pass confirm_destructive=true after reviewing the plan. One…\n  - `delete_project` (writes): Delete a project (removes GitHub repo, K8s deployments, and database). It runs as a job: poll the returned job_id with get_job_status until it is completed.…\n  - `rollback_project` (writes): Rollback a project to a previous version. ⚠️ WARNING: This reverts schema AND code to the specified commit. Database data is NOT rolled back. Use…\n  - `rename_project` (writes): Rename a project (changes display name, not project_code)\n  - `get_graph_schema` (read-only): Get the graph schema definition of a project. Returns the hierarchical schema with nodes (entities) and relationships. Graph schemas define entity hierarchies…\n  - `get_graph_template_schemas` (read-only): Get pre-built graph template schemas for common use cases. ⭐ USE THIS FIRST when creating a new graph project! Templates show the CORRECT graph schema format…\n  - `get_graph_version_history` (read-only): Get the deployment and version history for a graph project. Shows all schema changes with commit SHAs, timestamps, version numbers, and messages. Use this to…\n  - `get_graph_schema_at_version` (read-only): Get the graph schema as it existed at a specific version/commit. Use get_graph_version_history to find commit SHAs. Useful for comparing schemas across…\n  - `get_graph_project_info` (read-only): Get detailed graph project information including Kubernetes deployment status, Neo4j database health, pod status, and resource usage. Use this after deployment…\n  - `create_graph_project` (writes): Create a new Neo4j graph database project from a hierarchical JSON schema. ⚠️ GRAPH SCHEMA FORMAT — READ BEFORE CREATING: Graph schemas define nodes (entities)…\n  - `update_graph_schema` (writes): Update a graph project's schema (saves to database, does NOT deploy). ⚠️ Follow ALL rules from create_graph_project: • Must have \"nodes\" key with at least one…\n  - `deploy_graph_staging` (writes): Deploy a graph project to the staging environment. This triggers: (1) Schema validation, (2) Neo4j entity code generation, (3) Docker image build, (4) GitHub…\n  - `deploy_graph_production` (writes): Promote graph staging to production. Creates a separate production Neo4j instance with its own credentials and database. Requires paid plan. A deploy that…\n  - `delete_graph_project` (writes): Delete a graph project (removes GitHub repo, K8s deployments, Neo4j database, and credentials). It runs as a job: poll the returned job_id with get_job_status…\n  - `rollback_graph_project` (writes): Rollback a graph project to a previous version. ⚠️ WARNING: This reverts schema AND code to the specified commit. Neo4j data is NOT rolled back. Use…\n  - `create_graph_node` (writes): Create a single node in a deployed graph project. REQUIRES: Project must be deployed (use deploy_graph_staging first). The entity_type must match an entity key…\n  - `get_graph_node` (read-only): Get a specific node by its entity_id from a deployed graph project. Returns all node properties including created_at and updated_at timestamps.\n  - `list_graph_nodes` (read-only): List nodes of a specific entity type from a deployed graph project. Supports pagination with limit/offset. Returns nodes ordered by creation date (newest…\n  - `update_graph_node` (writes): Update properties of an existing node in a deployed graph project. Only send the fields you want to change — unspecified fields remain unchanged.\n  - `delete_graph_node` (writes): Delete a node and all its relationships from a deployed graph project. ⚠️ This also removes all relationships connected to this node (DETACH DELETE).\n  - `create_graph_relationship` (writes): Create a relationship between two nodes in a deployed graph project. The rel_type must match a relationship key from the project schema. Use…\n  - `get_node_relationships` (read-only): Get all relationships connected to a specific node. Supports direction filtering (incoming, outgoing, both) and relationship type filtering.\n  - `delete_graph_relationship` (writes): Delete a specific relationship by its internal ID. Use get_node_relationships to find relationship IDs.\n  - `bulk_create_graph_nodes` (writes): Create multiple nodes at once (up to 500 per call). Uses Neo4j UNWIND for high performance. Essential for knowledge graph population — create hundreds of…\n  - `bulk_create_graph_relationships` (writes): Create multiple relationships at once (up to 500 per call). Uses Neo4j UNWIND for high performance. Essential for connecting knowledge — link hundreds of…\n  - `search_graph_nodes` (read-only): Search for nodes by property values in a deployed graph project. Supports exact match and contains search (prefix value with ~ for contains). Examples: Exact:…\n  - `fulltext_search_graph` (read-only): Search across ALL string properties of ALL nodes in a deployed graph using free-text queries. Unlike search_graph_nodes (which filters by specific property),…\n  - `traverse_graph` (read-only): Walk the graph from a starting node, discovering connected knowledge. Returns all nodes reachable within max_depth hops, with their distance from the start.…\n  - `get_graph_statistics` (read-only): Get statistics about a deployed graph: total node count, total relationship count, counts per entity type, counts per relationship type. Essential for…\n  - `get_graph_data_schema` (read-only): Get the runtime schema of a DEPLOYED graph project — shows the actual entity types and relationship types available for data operations. Returns: Available…\n- How its tools read to an agent (0 errors, 17 warnings, 1 note, about 13,624 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC07 create_graph_project: the description is about 648 tokens\n  - warn TC07 create_project: the description is about 653 tokens\n  - warn TC07 patch_schema: the description is about 505 tokens\n  - warn TC13 bulk_create_graph_nodes: nodes[].data (object with no properties)\n  - warn TC13 bulk_create_graph_relationships: relationships[].data (object with no properties)\n  - warn TC13 create_graph_node: data (object with no properties)\n  - warn TC13 create_graph_project: schema (object with no properties)\n  - warn TC13 create_graph_relationship: data (object with no properties)\n  - warn TC13 create_project: schema (object with no properties)\n  - warn TC13 patch_schema: operations[] (object with no properties)\n  - warn TC13 search_graph_nodes: filters (object with no properties)\n  - warn TC13 update_graph_node: data (object with no properties)\n  - warn TC13 update_graph_schema: schema (object with no properties)\n  - warn TC13 update_schema: schema (object with no properties)\n  - warn TC21 delete_project: described almost the same as delete_graph_project (92% of the same words)\n  - warn TC21 deploy_production: described almost the same as deploy_graph_production (83% of the same words)\n  - warn TC23 server: 50 tools\n  - note TC24 server: 50 of 50 tools have no outputSchema\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/rationalbloks-mcp.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "RationalBloks",
        "url": ""
      }
    ],
    "description": "RationalBloks, an MCP server by rationalbloks.com, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Deploy production REST and Neo4j Graph APIs from JSON schemas in seconds.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "RationalBloks",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/rationalbloks-mcp",
    "published": "",
    "section": "indexed",
    "title": "RationalBloks: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-10",
    "url": "https://www.anchorterminal.com/tools/rationalbloks-mcp"
  },
  "tokens": {
    "markdown": 3100,
    "slim": 3030
  },
  "version": 1
}
