An API builder and headless CMS MCP server for LLMs
Apito MCP Server
A Model Context Protocol (MCP) server for Apito - an API builder and headless CMS. This server enables LLMs like Claude to interact with Apito's system GraphQL API to create models, manage fields, and build schemas.
Features
- Model Management: Create, list, query, and delete models in your Apito project
- Field Management: Add, update, rename, and delete fields with explicit type specification
- Relation Management: Create relations between models (has_one, has_many)
- Full Field Type Support: All Apito field types including text, multiline, number, date, boolean, media, object, repeated, list (with sub-types), and geo
- Resources: Expose model schemas as MCP resources for easy access
- Error Handling: Comprehensive error handling with detailed messages
- Cloudflare Workers: Deploy as a remote MCP server for use with any MCP client
- Project-Dependent API Keys: API keys are passed per-request, allowing different projects to use the same worker
MCP Client Configuration (Cursor / mcp-remote)
Add the apito-mcp server to your MCP client config (e.g. Cursor ~/.cursor/mcp.json or project .cursor/mcp.json):
{
"mcpServers": {
"apito-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://apito-mcp.apito.workers.dev/sse",
"--header",
"X-Apito-Key:${APITO_API_KEY}"
],
"env": {
"APITO_API_KEY": "ak_your-api-key-here"
}
}
}
}
Replace ak_your-api-key-here with your Apito API key. The X-Apito-Key header is sent with each request to the remote worker.
MCP Tools
`create_model`
Create a new model in Apito.
Arguments:
model_name(required): Name of the modelsingle_record(optional): Whether this is a single-record model
`add_field`
Add a field to an existing model. You must specify field_type and input_type explicitly.
Arguments:
model_name(required): Name of the modelfield_label(required): Label/name of the fieldfield_type(required): Field type (see valid combinations below)input_type(required): Input type (see valid combinations below)field_sub_type(optional): Required forlistfields. Valid values:dynamicList,dropdown,multiSelectparent_field(optional): Parent field name for nested fieldsis_object_field(optional): Whether this field can contain nested fields (auto-set forobjectandrepeatedtypes)field_description(optional): Field descriptionvalidation(optional): Validation rules (see below for requirements)serial(optional): Serial number for field ordering
Valid Field Type Combinations:
- Text Field:
field_type="text",input_type="string"- Single line text input - Rich Text Field:
field_type="multiline",input_type="string"- Multiline editor with formatting - DateTime Field:
field_type="date",input_type="string"- Date & Time input - Dynamic Array:
field_type="list",field_sub_type="dynamicList",input_type="string"- Flexible list allowing multiple items - Dropdown Menu:
field_type="list",field_sub_type="dropdown",input_type="string"- Predefined list for single selection- REQUIRES:
validation.fixed_list_elements(array of strings) andvalidation.fixed_list_element_type="string"
- REQUIRES:
- Multi-Checkbox Selector:
field_type="list",field_sub_type="multiSelect",input_type="string"- Allows selecting multiple options- REQUIRES:
validation.fixed_list_elements(array of strings) andvalidation.fixed_list_element_type="string"
- REQUIRES:
- Boolean Field:
field_type="boolean",input_type="bool"- True or False toggle - File Upload:
field_type="media",input_type="string"- Upload images or files - Integer Field:
field_type="number",input_type="int"- Whole numbers only - Decimal Field:
field_type="number",input_type="double"- Decimal numbers - GeoPoint Field:
field_type="geo",input_type="geo"- Latitude & Longitude - Object Schema:
field_type="object",input_type="object",is_object_field=true- Single object with multiple fields - Array Schema:
field_type="repeated",input_type="repeated",is_object_field=true- List of objects with multiple fields
Example - Simple Field:
{
"model_name": "dentalAssessment",
"field_label": "Date",
"field_type": "date",
"input_type": "string"
}
Example - Dropdown Field:
{
"model_name": "dentalAssessment",
"field_label": "Status",
"field_type": "list",
"field_sub_type": "dropdown",
"input_type": "string",
"validation": {
"fixed_list_elements": ["active", "inactive", "pending"],
"fixed_list_element_type": "string"
}
}
Example - Nested Object Field:
{
"model_name": "dentalAssessment",
"field_label": "Chief Complaint",
"field_type": "object",
"input_type": "object",
Tools (2)
create_modelCreate a new model in Apito.add_fieldAdd a field to an existing model with specific type configurations.Environment Variables
APITO_API_KEYrequiredThe API key for your Apito projectConfiguration
{"mcpServers": {"apito-mcp": {"command": "npx", "args": ["-y", "mcp-remote", "https://apito-mcp.apito.workers.dev/sse", "--header", "X-Apito-Key:${APITO_API_KEY}"], "env": {"APITO_API_KEY": "ak_your-api-key-here"}}}}