{
    "$schema": "https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json",
    "version": "1.0",
    "protocolVersion": "2025-06-18",
    "serverInfo": { "name": "hellodb", "title": "hellodb", "version": "1.0.0" },
    "description": "Design and edit database schemas on a visual ERD canvas. Create schemas, add models, fields and relations, read the canvas back, arrange the layout, cut named versions and compare them.",
    "iconUrl": "https://hellodb.io/mark-light.svg",
    "documentationUrl": "https://hellodb.io/developers",
    "transport": { "type": "streamable-http", "endpoint": "https://api.hellodb.io/bridge/mcp" },
    "capabilities": { "tools": { "listChanged": false } },
    "authentication": {
        "required": true,
        "schemes": ["header"],
        "header": "X-Agent-Token",
        "description": "An agent key, created at https://hellodb.io/app#agent-access and sent on every request. It carries exactly what its owner can reach - their own schemas and every schema shared with them - and is revoked from the same panel. health.check needs none."
    },
    "instructions": "Setup is one line: https://hellodb.io/agent/setup.txt. It installs a skill carrying the canvas layout rules, so an agent adding a model to a hand-arranged schema leaves the rest of the arrangement alone.",
    "tools": [
        {
            "name": "health.check",
            "description": "Liveness probe: reports whether the API and its database are reachable"
        },
        { "name": "user.me", "description": "The account this session or agent token belongs to" },
        {
            "name": "schema.list",
            "description": "List schemas the signed-in user can open — their own and any shared with them, newest first. Metadata only; no canvas content. Pass `query` to find one by name rather than reading the whole list. Names are not unique: when more than one row comes back for the name you were given, tell them apart by access, description, model count and updatedAt rather than picking one."
        },
        { "name": "schema.get", "description": "One schema by id, with the caller’s access level" },
        { "name": "schema.create", "description": "Create an empty schema and its canvas" },
        { "name": "schema.patch", "description": "Rename a schema, or change its description, engine or default view" },
        {
            "name": "schema.setArchived",
            "description": "Archive a schema or bring it back. Archiving hides it from the list without deleting anything."
        },
        {
            "name": "schema.describe",
            "description": "A compact description of one schema: model names, their fields and types, and the relations between them. Use this to reason about a schema; it omits layout and prose so it stays small."
        },
        {
            "name": "canvas.get",
            "description": "The current canvas of a schema — every model, field and relation, as drawn."
        },
        {
            "name": "canvas.applyOps",
            "description": "Apply a batch of canvas operations — add or move models, edit fields, draw relations. Everyone with the schema open sees the result immediately. `model.patch` accepts `hideRelations`, which stops one model’s edges being drawn so a hub does not bury the rest of the schema; it deletes nothing and the edges return on hover, but always tell the person which models you set it on."
        },
        {
            "name": "canvas.replace",
            "description": "Replace the whole canvas at once. For generating or importing a schema — dozens of models arriving together land as one change rather than as a stream that makes the canvas thrash."
        },
        {
            "name": "canvas.tidy",
            "description": "Re-arrange every model into left-to-right columns by relation depth — the same layout as the Tidy button. This REPLACES the current arrangement: use it on a new or unarranged schema, or when the person asks to reset the layout. Never use it to tidy a canvas someone arranged by hand; place new models individually instead."
        },
        {
            "name": "version.list",
            "description": "The version history of a schema, newest first, one page at a time. Metadata only — no canvas content. Two numbers from here form a comparison the person can open at /app/{schemaId}/compare/v{from}/v{to}."
        },
        { "name": "version.get", "description": "One version’s canvas, as it was when that version was cut." },
        {
            "name": "version.create",
            "description": "Name the current state of a schema as a version. Cut one before and after any substantial change: the two numbers form a comparison the person can open at /app/{schemaId}/compare/v{from}/v{to}, which draws the difference on the canvas itself."
        },
        {
            "name": "version.restore",
            "description": "Put a past version back as the current canvas. History is never rewritten — this appends a new version recording where it came from."
        },
        {
            "name": "version.setArchived",
            "description": "File a version out of the history list, or put it back. Display only — an archived version keeps its number and still restores and compares. Use it for a version cut by mistake, not to clean up history somebody may still be reading."
        },
        {
            "name": "version.diff",
            "description": "What changed between two versions of a schema, as Markdown. Pass version numbers, or \"current\" for the live canvas. Prefer giving a person the drawing at /app/{schemaId}/compare/v{from}/v{to}; use this when you need to read the changes yourself."
        },
        { "name": "share.list", "description": "Who a schema is shared with, and at what level." },
        {
            "name": "share.invite",
            "description": "Share a schema with someone by email, or change the access of someone it is already shared with."
        },
        { "name": "share.revoke", "description": "Stop sharing a schema with someone." },
        { "name": "share.leave", "description": "Remove yourself from a schema someone shared with you." },
        { "name": "share.setPublic", "description": "Turn the public read-only link on or off for a schema." },
        {
            "name": "share.rotateLink",
            "description": "Replace the public link with a new one, which invalidates every address already handed out."
        },
        {
            "name": "issue.report",
            "description": "Report a bug, idea or note about hellodb itself — the product, not the schema being edited. File a bug the moment a tool behaves wrongly and you can say concretely what you expected and what happened. File an idea only for a concrete gap the work in front of you exposed, and only once the person has agreed to it. Not a place to log notes for the user."
        }
    ]
}
