_ registry / mcp streamable-http · checked 2h ago

rationalbloks-backend

https://mcp.rationalbloks.com

Registry code: e0efc1279548a12f

api record

RationalBloks: production REST APIs (PostgreSQL) and graph APIs (Neo4j) generated from JSON schemas and deployed onto your own resource pools.

CHANGE A SCHEMA SAFELY

endpoint
https://mcp.rationalbloks.com/
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is rationalbloks-backend live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is rationalbloks-backend free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does rationalbloks-backend have?
64 tools: update_schema, rename_project, get_graph_node, list_project_jobs, get_version_history, get_project_info, get_project_usage, list_project_files, ….
Is rationalbloks-backend safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.1%· all time 99.1%

latency
89ms

last good check

priced tools
0

of 64 tools

_ answered our checks, 90 days 433 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • create relational database project
  • create graph database project
  • deploy database project to staging
  • add nodes to graph database
  • query graph database
takes → gives
text, data → text, data
tools
23 reads17 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 64 tools
1 auth-required 63 never probed 1 of 64 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_graph_template_schemas reads auth-required 44d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • update_schema unknown never probed

    Replace a project's WHOLE schema (saves to database, does NOT deploy). DESTRUCTIVE: a table or field the schema leaves out is dropped by the next deploy. For a new data model or a template. To change part of a schema use patch_schema, and drop_schema_items to drop; sending back a large schema to change one field risks changing something else on the way. ⚠️ Follow ALL rules from create_project: • FLAT format (no 'fields' nesting) • string: max_length (default 255) • decimal: precision + scale (default 10, 2) • Use "datetime" NOT "timestamp" • DON'T define: id, created_at, updated_at, row_version • NEVER create users/customers/employees tables (use app_users) ⚠️ MIGRATION RULES: • New fields MUST be "required": false OR have "default" value • Cannot add required field without default to existing tables WORKFLOW: 1. get_schema to see the current schema (its 'version' pins the save) 2. preview_schema_change with the new schema: check 'diff' and 'plan' 3. update_schema (pass expected_version to be refused if someone else saved meanwhile) 4. deploy_staging, then get_job_status A schema the deploy would refuse is refused here, and nothing is saved. The answer carries 'diff', 'plan' and the new 'version'.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "schema"
      ],
      "properties": {
        "schema": {
          "type": "object",
          "description": "New JSON schema in FLAT format (table_name → field_name → properties) — the WHOLE schema. Every field MUST have a 'type' property."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "expected_version": {
          "type": "string",
          "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."
        }
      }
    }
    arguments 21 lines
  • rename_project changes data unknown never probed

    Rename a project (changes display name, not project_code)

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "New display name for the project"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 17 lines
  • get_graph_node reads unknown never probed

    Get a specific node by its entity_id from a deployed graph project. Returns all node properties including created_at and updated_at timestamps.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "entity_id"
      ],
      "properties": {
        "entity_id": {
          "type": "string",
          "description": "The node's entity_id"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key (e.g., 'person', 'concept')"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 26 lines
  • list_project_jobs unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max jobs to return (1-1000, default 100)"
        },
        "offset": {
          "type": "integer",
          "description": "Jobs to skip, newest first (default 0)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 20 lines
  • get_version_history reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_project_info reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_project_usage reads unknown never probed

    Get resource usage metrics (CPU, memory) for a project

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • list_project_files reads unknown never probed

    List a project's uploaded files (metadata + public URLs), most recent first. Inspection only — files are not streamed through MCP.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max files to return (1-1000, default 100)"
        },
        "offset": {
          "type": "integer",
          "description": "Pagination offset (default 0)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: production)"
        }
      }
    }
    arguments 24 lines
  • rollback_project unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "version"
      ],
      "properties": {
        "version": {
          "type": "string",
          "description": "Commit SHA or version to rollback to"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 21 lines
  • get_graph_version_history reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_graph_project_info reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • create_graph_project changes data unknown never probed

    Create a new Neo4j graph database project from a hierarchical JSON schema. ⚠️ GRAPH SCHEMA FORMAT — READ BEFORE CREATING: Graph schemas define nodes (entities) and relationships, NOT flat database tables. Each field is a dict with "type" and optional "required": true (defaults to false). SCHEMA STRUCTURE: { "nodes": { "EntityName": { "description": "What this entity represents", "flat_labels": ["AdditionalLabel"], "schema": { "field_name": {"type": "string", "required": true}, "other_field": {"type": "integer"} } } }, "relationships": { "RELATIONSHIP_TYPE": { "from": "EntityName", "to": "OtherEntity", "cardinality": "MANY_TO_MANY", "data_schema": { "field_name": {"type": "date"} } } } } FIELD TYPES: string, integer, float, boolean, date, json CARDINALITY OPTIONS: ONE_TO_ONE, ONE_TO_MANY, MANY_TO_ONE, MANY_TO_MANY HIERARCHICAL NODES: nest an entity inside its parent entity (beside "description", "flat_labels" and "schema") to create a type hierarchy; the child inherits the parent's labels: "Animal": {"description": "...", "schema": {...}, "Dog": {"description": "...", "schema": {...}}} RULES: 1. "nodes" key is REQUIRED — must contain at least one entity 2. Each entity needs "description" and "schema" with field definitions 3. Each field is {"type": "...", "required": true/false} — required defaults to false 4. Relationship "from"/"to" must reference defined node names 5. Relationship types should be UPPER_SNAKE_CASE 6. Entity names should be PascalCase 7. Automatic fields (id, created_at, updated_at) are NOT needed WORKFLOW: 1. get_graph_template_schemas FIRST to see valid examples 2. create_graph_project with a cluster_id from list_clusters 3. Poll get_job_status with the returned job_id (2-5 minutes) While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "schema",
        "cluster_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Project name"
        },
        "schema": {
          "type": "object",
          "description": "Graph schema with 'nodes' and optionally 'relationships' keys. Use get_graph_template_schemas to see valid examples."
        },
        "cluster_id": {
          "type": "string",
          "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."
        }
      }
    }
    arguments 22 lines
  • traverse_graph reads unknown never probed

    Walk the graph from a starting node, discovering connected knowledge. Returns all nodes reachable within max_depth hops, with their distance from the start. Essential for exploring knowledge graphs — find related concepts, trace connections, discover clusters. Example: Start from "Alan Turing", traverse outgoing relationships up to 3 hops deep: start_entity_type: "person" start_entity_id: "alan-turing-001" max_depth: 3 direction: "outgoing" Supports filtering by relationship types and direction.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "start_entity_type",
        "start_entity_id"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results (default: 100, max: 1000)"
        },
        "direction": {
          "type": "string",
          "description": "Direction: outgoing, incoming, or both (default: both)"
        },
        "max_depth": {
          "type": "integer",
          "description": "Maximum traversal depth (default: 3, max: 10)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        },
        "start_entity_id": {
          "type": "string",
          "description": "Entity ID of the starting node"
        },
        "start_entity_type": {
          "type": "string",
          "description": "Entity key of the starting node"
        },
        "relationship_types": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Filter by relationship types (UPPER_SNAKE_CASE). Omit for all types."
        }
      }
    }
    arguments 45 lines
  • get_schema_at_version reads unknown never probed

    Get the schema as it was at a specific version/commit

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "version"
      ],
      "properties": {
        "version": {
          "type": "string",
          "description": "Commit SHA of the version"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 17 lines
  • get_template_schemas reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • get_subscription_status reads unknown never probed

    Get your subscription tier, limits, and usage

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • get_project_storage_usage reads unknown never probed

    Get object-storage usage for a project: file count and bytes used against the plan limits.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: production)"
        }
      }
    }
    arguments 16 lines
  • deploy_production changes data unknown never probed

    Promote staging to production (requires a paid plan): production's database migrates from the schema it runs to the one staging runs, and production runs staging's build. With staging unchanged since the last promotion, it rebuilds production with no schema change. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status. A plan that drops data is refused, naming every table, field, entity or relationship it would drop, and every field whose type change rounds or cuts its values (a decimal with a smaller scale or turned integer, a datetime turned date): deploy_destructive applies it, a tool of its own so a client asks before it runs. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • delete_graph_relationship changes data unknown never probed

    Delete a specific relationship by its internal ID. Use get_node_relationships to find relationship IDs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "rel_type",
        "rel_id"
      ],
      "properties": {
        "rel_id": {
          "type": "integer",
          "description": "Internal relationship ID (from get_node_relationships)"
        },
        "rel_type": {
          "type": "string",
          "description": "Relationship key"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 26 lines
  • set_module_env unknown never probed

    Set a module's environment variables: {NAME: value} sets one, {NAME: null} removes one, and every variable not named is kept. A backend module restarts to take them; a frontend module rebuilds (they are build arguments). Values are stored encrypted and never returned: the answer and list_modules name the variables only. DESTRUCTIVE: a value replaced or removed cannot be read back. CORS_ORIGINS, DEPLOY_* and GITHUB_TOKEN are the platform's. The operation is a job: poll the returned job_id with get_job_status. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id",
        "env_vars"
      ],
      "properties": {
        "env_vars": {
          "type": "object",
          "description": "{NAME: value} to set (text), {NAME: null} to remove; variables not named are kept",
          "additionalProperties": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 23 lines
  • scale_module unknown never probed

    Run 1 or 2 pods of a module (freeze_module stops it). One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id",
        "replicas"
      ],
      "properties": {
        "replicas": {
          "enum": [
            1,
            2
          ],
          "type": "integer",
          "description": "1 or 2 pods"
        },
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 21 lines
  • list_projects reads unknown never probed

    List all your RationalBloks projects with their status and URLs

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • get_project reads unknown never probed

    Get detailed information about a specific project

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_schema unknown never probed

    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=...).

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Read only these fields, each written 'table.field' (e.g. [\"parameters.is_clock\"]); their table's own keys come with them."
        },
        "tables": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Read only these tables, whole (e.g. [\"parameters\"]). A table the schema does not hold is refused."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 26 lines
  • get_user_info unknown never probed

    Get information about the authenticated user

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • list_clusters reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • get_job_status reads unknown never probed

    Check the status of a job (a create, deploy, promotion, rollback, deletion or module operation). 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. A module job names its module_code, and a completed module build's result names the image it built (its commit). 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "job_id"
      ],
      "properties": {
        "job_id": {
          "type": "string",
          "description": "Job ID a create, deploy, promotion, rollback, deletion or module operation answered"
        }
      }
    }
    arguments 12 lines
  • get_schema_reference reads unknown never probed

    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, checked at commit when deferrable), __audit__ (append-only audit log), __admin_write__ (a table only admins write), how user foreign keys are attributed on create, reading many rows in one request with <field>__in=a,b,c (the values separated by commas only), deleting the rows a filter names with expected_count, and writes that state the row_version they read (If-Match on a route, if_version in a batch).

    mcp-tool

    {
      "type": "object",
      "required": [],
      "properties": {}
    }
    arguments 5 lines
  • preview_schema_change unknown never probed

    Preview a schema change, saving nothing: the one way to see what a change would do before it is saved. Pass ONE of: • operations: the operations patch_schema or drop_schema_items would apply (relational projects) • schema: a whole schema in place of the saved one (relational or graph projects) ANSWER: 'applied' (for operations), 'diff' (every property saving it would change, by path), 'summary' and 'plan' (the migration the next deploy would then run, every table, field, entity or relationship it drops named), and 'version' (the saved schema's: pass it as expected_version to the save that follows, so it is refused if someone saved meanwhile). A relational schema the deploy would refuse is refused here, with the reason.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "schema": {
          "type": "object",
          "description": "A whole schema in place of the saved one (relational or graph). Pass this or operations."
        },
        "operations": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "A change to part of a relational schema, as patch_schema or drop_schema_items take it. Pass this or schema."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 23 lines
  • create_project changes data unknown never probed

    Create a new RationalBloks project (a PostgreSQL REST API) from a JSON schema, on one of your resource pools. ⚠️ CRITICAL RULES - READ BEFORE CREATING SCHEMA: 1. FLAT FORMAT (REQUIRED): ✅ CORRECT: {"orders": {"total": {"type": "decimal", "precision": 10, "scale": 2}}} ❌ WRONG: {"orders": {"fields": {...}}} — never nest under 'fields' 2. EVERY field has a "type": string (MUST have max_length), text, integer, decimal (precision, scale), boolean, uuid, date, datetime (NOT "timestamp"), json, and the PostgreSQL arrays uuid_array, integer_array, text_array, float_array (GIN-indexed: @> contains, <@ contained_by, && overlaps) 3. AUTOMATIC FIELDS (DON'T define): id, created_at, updated_at, row_version 4. USERS: NEVER create users/customers/employees tables with email or password. Link to the built-in app_users table: {"user_id": {"type": "uuid", "foreign_key": "app_users.id"}}. A table with such a field is owner-scoped: each user sees their own rows. 5. FIELD OPTIONS: required, unique, default, enum, foreign_key ("table.id"), on_delete (cascade, set_null, restrict, no_action), nullable, index, description, write_only, computed. Advanced features (__policy__, computed columns, __constraints__, __audit__): get_schema_reference. BACKEND ENGINE (backend_type): "python" (FastAPI, default) or "rust" (Axum: faster cold starts, lower memory). WORKFLOW: 1. get_template_schemas FIRST to see valid examples 2. create_project with a cluster_id from list_clusters 3. Poll get_job_status with the returned job_id (2-5 minutes) 4. get_project_info gives the live URL While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "schema",
        "cluster_id"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "Project name"
        },
        "schema": {
          "type": "object",
          "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."
        },
        "cluster_id": {
          "type": "string",
          "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."
        },
        "backend_type": {
          "enum": [
            "python",
            "rust"
          ],
          "type": "string",
          "description": "Backend engine: 'python' (FastAPI, default) or 'rust' (Axum, faster). Default: python"
        }
      }
    }
    arguments 30 lines
  • patch_schema changes data unknown never probed

    Change PART of a project's schema without dropping any of it (saves to database, does NOT deploy). Send only the change. The server applies it to the saved schema, in order and all together, and keeps every table and field it does not touch — including their identity, so a rename stays a rename and the column keeps its data. OPERATIONS (each one small object, applied in the order given): • {"op": "add_table", "table": "clocks", "definition": {...}} new table, same FLAT rules as create_project • {"op": "rename_table", "table": "clocks", "to": "timers"} • {"op": "add_field", "table": "assets", "field": "serial", "definition": {"type": "string", "max_length": 64}} • {"op": "rename_field", "table": "parameters", "field": "is_clock", "to": "clock_kind"} • {"op": "set_field", "table": "assets", "field": "name", "properties": {"max_length": 300}} merges; a property set to null is removed • {"op": "set_table", "table": "assets", "properties": {"__audit__": true}} __policy__, __constraints__, __audit__, __admin_write__ Dropping a table or field is drop_schema_items, a tool of its own. ALL OR NOTHING: an operation that cannot be applied — a table or field that is not there, a name already taken, a schema the deploy would refuse — refuses the whole patch, naming the operation, and nothing is saved. EVERY ANSWER IS A DIFF: 'applied' (what each operation did), 'diff' (every changed property by path), 'summary' and 'plan' (the migration a deploy would then run), and 'version' (the schema's version after the change). WORKFLOW: 1. get_schema with tables/fields to read the part you are changing (its 'version' is the whole schema's) 2. preview_schema_change with the operations: check 'diff' and 'plan' 3. patch_schema with the same operations (pass expected_version to be refused if someone else saved meanwhile) 4. deploy_staging, then get_job_status

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "operations"
      ],
      "properties": {
        "operations": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "The operations, applied in order and all together. See the tool description for every op and its fields."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "expected_version": {
          "type": "string",
          "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."
        }
      }
    }
    arguments 24 lines
  • drop_schema_items unknown never probed

    Drop tables or fields from a project's saved schema (saves to database, does NOT deploy). DESTRUCTIVE: the next deploy drops their data. OPERATIONS (applied in order and all together): • {"op": "drop_table", "table": "clocks"} • {"op": "drop_field", "table": "parameters", "field": "is_clock"} A drop that cannot be applied (a table or field that is not there, a schema the deploy would refuse, such as a field another reads) refuses them all, naming it, and nothing is saved. The answer carries 'applied', 'diff', 'plan' and the new 'version'. WORKFLOW: 1. preview_schema_change with the same operations: check 'diff' and 'plan' 2. drop_schema_items (pass expected_version to be refused if someone else saved meanwhile) 3. deploy_staging refuses the plan and names its drops; deploy_destructive applies it, then get_job_status

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "operations"
      ],
      "properties": {
        "operations": {
          "type": "array",
          "items": {
            "type": "object"
          },
          "description": "The drops: drop_table(table) and drop_field(table, field) operations, applied in order and all together."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "expected_version": {
          "type": "string",
          "description": "The 'version' a get_schema read answered. The drop is refused (409) when the saved schema changed since."
        }
      }
    }
    arguments 24 lines
  • deploy_staging changes data unknown never probed

    Deploy a project's saved schema 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 plan that drops data is refused, naming every table, field, entity or relationship it would drop, and every field whose type change rounds or cuts its values (a decimal with a smaller scale or turned integer, a datetime turned date): deploy_destructive applies it, a tool of its own so a client asks before it runs. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • deploy_destructive unknown never probed

    Deploy a plan that drops data, of a relational or a graph project. DESTRUCTIVE: the tables, fields, entities or relationships the plan drops lose their data. environment 'staging' deploys the saved schema, 'production' promotes staging. Use it only after a deploy tool (deploy_staging, deploy_production, deploy_graph_staging, deploy_graph_production) refused the plan, naming its drops, and those drops are intended. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "environment"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID), relational or graph"
        },
        "environment": {
          "enum": [
            "staging",
            "production"
          ],
          "type": "string",
          "description": "staging (deploys the saved schema) or production (promotes staging)"
        }
      }
    }
    arguments 21 lines
  • redeploy_project unknown never probed

    Rebuild and roll out a project's staging environment from the schema it runs, with NO schema change, for a relational or a graph project: the current platform release, the project's settings (email, admin users) and its environment take effect. Refused (409) when the saved schema holds changes the last deploy did not apply (deploy_staging deploys those) or when nothing was deployed yet; a save that lands meanwhile is refused rather than deployed. deploy_production rebuilds production the same way when staging runs what production runs. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID), relational or graph"
        }
      }
    }
    arguments 12 lines
  • delete_project unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_graph_schema reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • get_graph_schema_at_version unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "version"
      ],
      "properties": {
        "version": {
          "type": "string",
          "description": "Commit SHA of the version to retrieve"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 17 lines
  • update_graph_schema changes data unknown never probed

    Replace a graph project's WHOLE schema (saves to database, does NOT deploy). DESTRUCTIVE: an entity, relationship or field the schema leaves out is deleted by the next deploy. ⚠️ Follow ALL rules from create_graph_project: • Must have "nodes" key with at least one entity • Each entity needs "description" and "schema" with field definitions • Each field is {"type": "...", "required": true/false} — required defaults to false • Relationships need "from", "to", and "cardinality" • Field types: string, integer, float, boolean, date, json • Relationship types should be UPPER_SNAKE_CASE • Entity names should be PascalCase WORKFLOW: 1. get_graph_schema to see the current schema (its 'version' pins the save) 2. preview_schema_change with the new schema: check 'diff' and 'plan' 3. update_graph_schema (pass expected_version to be refused if someone else saved meanwhile) 4. deploy_graph_staging, then get_job_status

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "schema"
      ],
      "properties": {
        "schema": {
          "type": "object",
          "description": "New graph schema with 'nodes' and optionally 'relationships' keys — the WHOLE schema."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "expected_version": {
          "type": "string",
          "description": "The 'version' a get_graph_schema read answered. The save is refused (409) when the saved schema changed since."
        }
      }
    }
    arguments 21 lines
  • deploy_graph_staging changes data unknown never probed

    Deploy a graph project's saved schema 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 plan that drops data is refused, naming every table, field, entity or relationship it would drop, and every field whose type change rounds or cuts its values (a decimal with a smaller scale or turned integer, a datetime turned date): deploy_destructive applies it, a tool of its own so a client asks before it runs. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • deploy_graph_production changes data unknown never probed

    Promote graph staging to production. Creates a separate production Neo4j instance with its own credentials and database. Requires paid plan. A plan that drops data is refused, naming every table, field, entity or relationship it would drop, and every field whose type change rounds or cuts its values (a decimal with a smaller scale or turned integer, a datetime turned date): deploy_destructive applies it, a tool of its own so a client asks before it runs. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • delete_graph_project changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • rollback_graph_project changes data unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "version"
      ],
      "properties": {
        "version": {
          "type": "string",
          "description": "Commit SHA to rollback to"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 21 lines
  • create_graph_node changes data unknown never probed

    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 from the project schema. Use get_graph_data_schema to see available entity types and their fields. Example: entity_type: "person" entity_id: "alan-turing-001" data: {"name": "Alan Turing", "birth_year": 1912, "field": "Computer Science"} The entity_id is your unique identifier — use meaningful IDs for knowledge graphs.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "entity_id",
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "description": "Node properties matching the entity schema"
        },
        "entity_id": {
          "type": "string",
          "description": "Unique identifier for the node"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key (e.g., 'person', 'concept')"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 31 lines
  • list_graph_nodes reads unknown never probed

    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).

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results (default: 100, max: 1000)"
        },
        "offset": {
          "type": "integer",
          "description": "Pagination offset (default: 0)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key (e.g., 'person', 'concept')"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 29 lines
  • update_graph_node changes data unknown never probed

    Update properties of an existing node in a deployed graph project. Only send the fields you want to change — unspecified fields remain unchanged.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "entity_id",
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "description": "Properties to update (partial update)"
        },
        "entity_id": {
          "type": "string",
          "description": "The node's entity_id"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key (e.g., 'person', 'concept')"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 31 lines
  • delete_graph_node changes data unknown never probed

    Delete a node and all its relationships from a deployed graph project. ⚠️ This also removes all relationships connected to this node (DETACH DELETE).

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "entity_id"
      ],
      "properties": {
        "entity_id": {
          "type": "string",
          "description": "The node's entity_id"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key (e.g., 'person', 'concept')"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 26 lines
  • create_graph_relationship unknown never probed

    Create a relationship between two nodes in a deployed graph project. The rel_type must match a relationship key from the project schema. Use get_graph_data_schema to see available relationship types. Example: rel_type: "authored" from_id: "alan-turing-001" to_id: "on-computable-numbers-001" data: {"year": 1936} The from_id and to_id must be entity_ids of existing nodes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "rel_type",
        "from_id",
        "to_id"
      ],
      "properties": {
        "data": {
          "type": "object",
          "description": "Relationship properties (optional)"
        },
        "to_id": {
          "type": "string",
          "description": "Target node entity_id"
        },
        "from_id": {
          "type": "string",
          "description": "Source node entity_id"
        },
        "rel_type": {
          "type": "string",
          "description": "Relationship key (e.g., 'authored', 'related_to')"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 35 lines
  • bulk_create_graph_nodes changes data unknown never probed

    Create multiple nodes at once (up to 500 per call). Uses Neo4j UNWIND for high performance. Essential for knowledge graph population — create hundreds of entities from a single book chapter or article. Each node needs: entity_id (unique string) and data (properties dict). Example: entity_type: "concept" nodes: [ {"entity_id": "quantum-mechanics-001", "data": {"name": "Quantum Mechanics", "field": "Physics"}}, {"entity_id": "wave-function-001", "data": {"name": "Wave Function", "field": "Physics"}}, {"entity_id": "superposition-001", "data": {"name": "Superposition", "field": "Physics"}} ]

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "nodes"
      ],
      "properties": {
        "nodes": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "entity_id",
              "data"
            ],
            "properties": {
              "data": {
                "type": "object"
              },
              "entity_id": {
                "type": "string"
              }
            }
          },
          "description": "List of nodes. Each: {entity_id: string, data: {properties}}"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key for all nodes"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 41 lines
  • bulk_create_graph_relationships changes data unknown never probed

    Create multiple relationships at once (up to 500 per call). Uses Neo4j UNWIND for high performance. Essential for connecting knowledge — link hundreds of concepts, people, and events in one operation. Each relationship needs: from_id, to_id, and optional data (properties). Example: rel_type: "related_to" relationships: [ {"from_id": "quantum-mechanics-001", "to_id": "wave-function-001", "data": {"strength": "strong"}}, {"from_id": "quantum-mechanics-001", "to_id": "superposition-001", "data": {"strength": "strong"}} ]

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "rel_type",
        "relationships"
      ],
      "properties": {
        "rel_type": {
          "type": "string",
          "description": "Relationship key for all relationships"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        },
        "relationships": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "from_id",
              "to_id"
            ],
            "properties": {
              "data": {
                "type": "object"
              },
              "to_id": {
                "type": "string"
              },
              "from_id": {
                "type": "string"
              }
            }
          },
          "description": "List of relationships. Each: {from_id, to_id, data?}"
        }
      }
    }
    arguments 44 lines
  • search_graph_nodes reads unknown never probed

    Search for nodes by property values in a deployed graph project. Supports exact match and contains search (prefix value with ~ for contains). Examples: Exact: filters: {"name": "Alan Turing"} Contains: filters: {"name": "~turing"} (case-insensitive) Combined: entity_type: "person", filters: {"field": "~physics"} Without entity_type, searches ALL node types.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "filters"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results (default: 100, max: 1000)"
        },
        "offset": {
          "type": "integer",
          "description": "Pagination offset (default: 0)"
        },
        "filters": {
          "type": "object",
          "description": "Property filters. Prefix value with ~ for contains search."
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key to filter by (optional — omit to search all types)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 33 lines
  • fulltext_search_graph unknown never probed

    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), this searches every text field at once. Perfect for finding knowledge when you don't know which property contains the answer. Example: query "quantum" searches name, description, summary, notes, and all other string fields. Returns nodes with _match_fields showing which properties matched. Optionally filter by entity_type to narrow results.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "description": "Max results (default: 50, max: 500)"
        },
        "query": {
          "type": "string",
          "description": "Search text (case-insensitive, min 2 chars)"
        },
        "offset": {
          "type": "integer",
          "description": "Pagination offset (default: 0)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key to filter by (optional — omit to search all types)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 33 lines
  • get_graph_statistics reads unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 16 lines
  • get_graph_data_schema reads unknown never probed

    Get the runtime schema of a DEPLOYED graph project — shows the actual entity types and relationship types available for data operations. Returns: Available entity keys (for create_graph_node, list_graph_nodes, etc.) and relationship keys (for create_graph_relationship, etc.). ⭐ USE THIS FIRST before creating nodes/relationships to know what entity_type and rel_type values are valid.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        }
      }
    }
    arguments 16 lines
  • list_modules unknown never probed

    List a project's modules and what each runs: module_id (what every module tool takes), name, type (frontblok or logicblok), repository, url, staging_status (not_deployed, deploying, deployed, failed), deployed_at, image (the image of its last successful build, named by the commit it built: <name>:<short sha>-<build time>), replicas (live pods: 0 when frozen, null while the pool is not reporting), CPU and memory, and env_var_names (the names of its environment variables, never their values).

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id"
      ],
      "properties": {
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        }
      }
    }
    arguments 12 lines
  • deploy_module unknown never probed

    Deploy a new module from a GitHub repository onto the project's resource pool: a frontblok module is a Vite frontend, a logicblok module a backend built from its Dockerfile that serves port 8000 with GET /health. Its job clones the repository (the default branch head, or git_ref), builds it and serves it at the module_url the answer names; the project's CORS origins take the module in. A private repository needs the RationalBloks GitHub App installed on it. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status. While RationalBloks is being updated, the call is refused with 'RationalBloks is being updated': call it again in a few minutes.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "module_name",
        "github_repo_url",
        "module_type"
      ],
      "properties": {
        "git_ref": {
          "type": "string",
          "description": "Branch, tag or commit SHA for this first build (default: the default branch head)"
        },
        "env_vars": {
          "type": "object",
          "description": "Environment variables {NAME: value}, each value text",
          "additionalProperties": {
            "type": "string"
          }
        },
        "memory_mb": {
          "type": "integer",
          "description": "Memory allocation (default: 128)"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID) the module belongs to"
        },
        "module_name": {
          "type": "string",
          "description": "Display name"
        },
        "module_type": {
          "enum": [
            "frontblok",
            "logicblok"
          ],
          "type": "string",
          "description": "frontblok (a Vite frontend) or logicblok (a backend built from its Dockerfile)"
        },
        "cpu_millicores": {
          "type": "integer",
          "description": "CPU allocation (default: 100)"
        },
        "dockerfile_path": {
          "type": "string",
          "description": "Dockerfile path inside the repository (default: Dockerfile)"
        },
        "github_repo_url": {
          "type": "string",
          "description": "https://github.com/<owner>/<repo>"
        }
      }
    }
    arguments 54 lines
  • redeploy_module unknown never probed

    Rebuild a module from its repository's default branch head and roll it out, keeping its pod count. Its data and settings are untouched; the project's API (staging and production) and its backend modules restart to take the module's CORS origin. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status, whose result names the image built (its commit); list_modules shows it once done. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id"
      ],
      "properties": {
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 12 lines
  • update_module unknown never probed

    Rename a module, or point it at another GitHub repository, which its next redeploy builds. Pass module_name, github_repo_url or both. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id"
      ],
      "properties": {
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        },
        "module_name": {
          "type": "string",
          "description": "New display name"
        },
        "github_repo_url": {
          "type": "string",
          "description": "New repository, https://github.com/<owner>/<repo>"
        }
      }
    }
    arguments 20 lines
  • delete_module unknown never probed

    Remove a module: its pods stop and it leaves the project and its CORS origins. DESTRUCTIVE. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id"
      ],
      "properties": {
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 12 lines
  • freeze_module unknown never probed

    Stop a module's pods (scale to 0), remembering how many it ran; unfreeze_module starts them again. Freezing a frozen module changes nothing. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id"
      ],
      "properties": {
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 12 lines
  • unfreeze_module unknown never probed

    Start a frozen module's pods again, as many as it ran before the freeze. A running module is left as it is. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id"
      ],
      "properties": {
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        }
      }
    }
    arguments 12 lines
  • set_module_resources unknown never probed

    Set a module's CPU and memory and rebuild it so its pods take them. The allocation is checked against the resource pool's capacity first; a refused one is restored. The operation is ASYNCHRONOUS: poll the returned job_id with get_job_status. One operation runs on a module at a time, and none beside an operation on its project: 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "module_id",
        "cpu_millicores",
        "memory_mb"
      ],
      "properties": {
        "memory_mb": {
          "type": "integer",
          "description": "Memory allocation in MB"
        },
        "module_id": {
          "type": "string",
          "description": "Module ID (list_modules)"
        },
        "cpu_millicores": {
          "type": "integer",
          "description": "CPU allocation in millicores"
        }
      }
    }
    arguments 22 lines
  • get_node_relationships unknown never probed

    Get all relationships connected to a specific node. Supports direction filtering (incoming, outgoing, both) and relationship type filtering.

    mcp-tool

    {
      "type": "object",
      "required": [
        "project_id",
        "entity_type",
        "entity_id"
      ],
      "properties": {
        "direction": {
          "type": "string",
          "description": "Filter: incoming, outgoing, or both (default: both)"
        },
        "entity_id": {
          "type": "string",
          "description": "The node's entity_id"
        },
        "project_id": {
          "type": "string",
          "description": "Project ID (UUID)"
        },
        "entity_type": {
          "type": "string",
          "description": "Entity key of the node"
        },
        "environment": {
          "type": "string",
          "description": "Environment: staging or production (default: staging)"
        },
        "rel_type_filter": {
          "type": "string",
          "description": "Filter by relationship type (UPPER_SNAKE_CASE)"
        }
      }
    }
    arguments 34 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id e0efc1279548a12f.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/e0efc1279548a12f/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/e0efc1279548a12f/badge.svg)](https://brick.blue/agent/e0efc1279548a12f?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.