Typestate

Build and run a backend from plain English. Data, logic, endpoints, auth and jobs, deployed live.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~927Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.72% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "typestate": {
      "url": "https://mcp.typestate.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.typestate.com/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_blueprint(blueprint)

One blueprint's whole setup in English: every action's definition in full, the record types, web endpoints, schedules, sign-in, payments and MCP server it declares, what it cannot do, and what the person does after it starts. Read it before start_from_blueprint, and tell the person which rule they will most likely want to change.

Input Schema

{
  "type": "object",
  "properties": {
    "blueprint": {
      "description": "The blueprint's slug or name, as list_blueprints answers it.",
      "type": "string"
    }
  },
  "required": [
    "blueprint"
  ]
}

Output Schema

{
  "type": "object",
  "properties": {
    "answer": {
      "description": "The whole setup, in English, as Markdown.",
      "type": "string"
    }
  },
  "required": [
    "answer"
  ]
}
🟢get_started(about)

What Typestate is, what it costs, and how to connect to it. Call this first if you have met this server for the first time and want to know what it is for. Ask with no `about` and it answers all three parts at once.

Input Schema

{
  "type": "object",
  "properties": {
    "about": {
      "description": "Which part to answer: \"what_it_is\" for what the platform does, \"connecting\" for how an agent authenticates, \"plans\" for what it costs. Omit it to get all three.",
      "enum": [
        "what_it_is",
        "connecting",
        "plans"
      ],
      "type": "string"
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "answer": {
      "description": "The answer, in English, ready to show a person.",
      "type": "string"
    },
    "mcp_endpoint": {
      "description": "The address this server answers on.",
      "type": "string"
    },
    "sign_up_url": {
      "description": "Where a person opens an account.",
      "type": "string"
    },
    "website": {
      "description": "Where a person reads more about the platform.",
      "type": "string"
    }
  },
  "required": [
    "answer",
    "mcp_endpoint",
    "sign_up_url",
    "website"
  ]
}
🟢list_blueprints(purpose)

The blueprints: whole backends for a named kind of business, each a set of English definitions proven on this platform. Ask with the purpose in the customer's words, such as "salon appointments with a deposit", before you define the first entity of a new backend. A blueprint that fits is started with start_from_blueprint, and every definition in it is the customer's own to change afterwards.

Input Schema

{
  "type": "object",
  "properties": {
    "purpose": {
      "description": "What the backend is for, in the customer's words. Leave it out to list every blueprint.",
      "type": "string"
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "answer": {
      "description": "The matching blueprints, one paragraph each, in English.",
      "type": "string"
    },
    "slugs": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "answer",
    "slugs"
  ]
}
🟢list_integration_catalog(need)

The integration catalog: the systems a Typestate backend works with, made and checked by Typestate. A built-in one is turned on with one setting tool, which the answer names. A declared one was called against the real vendor on the date the answer gives, and apply_integration copies it into a service. Ask before you write a declaration yourself with define_integration.

Input Schema

{
  "type": "object",
  "properties": {
    "need": {
      "description": "What the backend needs, or a vendor's name: \"payments\", \"send email\", \"Slack\". Leave it out to list the whole catalog.",
      "type": "string"
    }
  }
}

Output Schema

{
  "type": "object",
  "properties": {
    "answer": {
      "description": "The matching integrations, one paragraph each.",
      "type": "string"
    },
    "slugs": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "answer",
    "slugs"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded1 tools
verifiedversion not recorded1 tools