Read and write typed fictional worlds (22 linked element types) via the OnlyWorlds open standard.
Connect Remote server
claude mcp add --transport http mcp https://www.onlyworlds.com/mcp --header "API-Key: <API_KEY>" --header "API-Pin: <API_PIN>"
{
"mcpServers": {
"mcp": {
"url": "https://www.onlyworlds.com/mcp",
"headers": {
"API-Key": "<API_KEY>",
"API-Pin": "<API_PIN>"
}
}
}
}
{
"servers": {
"mcp": {
"type": "http",
"url": "https://www.onlyworlds.com/mcp",
"headers": {
"API-Key": "<API_KEY>",
"API-Pin": "<API_PIN>"
}
}
}
}
Settings > Connectors > Add custom connector
URL: https://www.onlyworlds.com/mcp
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools 16 found in our last check
list_element_typesList all 22 OnlyWorlds element types with a one-line shape summary of each. Every world is built from these types; each element has a stable UUID `id`, a `name`, and a `type`. Use `get_element_schema(type)` for a type's full field list. Unauthenticated — schema is public referen…
get_element_schemaReturn the field structure of one OnlyWorlds element `type` (a slug from `list_element_types`, e.g. "character"). The result groups the type's writable fields by kind so a caller knows how to read and write them: `text` (strings), `integer`, `single_link` (one UUID), `multi_link…
search_schemaSearch every element type's fields for `query` (case-insensitive substring), across all 22 types. Useful for "which types have a `location` field?" or finding where a concept lives in the schema. Returns a mapping of type slug -> the matching field names in that type (types with…
list_worldsThe worlds you can read here. With an API-Key: the key's one world. Signed in through a hosted client (a bearer), where this server offers one: every world your account owns or is a member of, as your account's world list shows them; pass one's `id` (or its `slug`) as `world` to…
list_elementsList elements of one `type` in the world named by your API-Key header, newest-created first. `type` is a slug from `list_element_types` (e.g. "character"). Optional `name_contains` filters by case-insensitive name substring; `supertype` is trimmed and matched without regard to c…
get_elementFetch one element by `type` and `id` (a UUID) from the world named by your API-Key header. `type` is a slug from `list_element_types`. Returns the full v2 wire shape (the same body as `GET /api/v2/{type}/{id}`): `type`, `id`, `name`, scalar fields, link fields as UUID arrays, an…
search_elementsSearch the world named by your API-Key header for elements whose name or text fields (description and each type's prose fields, such as a Character's background) hold every word of `query` as a whole word, ignoring case: "ore" does not find "more", and "copper mine" needs both w…
get_changesReturn the delta feed for the world named by your API-Key header: every element created/updated (`op: "upsert"`, full body) or deleted (`op: "delete"`) since `since_cursor`, in apply order, in pages of `limit` (default 25, max 1000). Entries carry FULL element bodies — a default…
get_draughtWhat one Character knows, in one read: the draught. `id` is the Character's UUID; `policy` is one JSON object, every key optional: `components` (a list, or a comma string, of self, role, work, style, events, knowledge, names, sheet, recent, messages, room, proposed, roster; defa…
list_filesList the files attached to one element (`type` and `id`, a UUID) in the world named by your API-Key header: PDFs, text files, images (png, jpg, webp, avif) and world bundles kept on onlyworlds.com beside the element, never inside it. Returns `{data: [{id, name, kind, size, label…
read_fileRead one file attached to an element, by its id (from `list_files`). A text file (txt, md, json, csv, yaml, toml) answers its words, at most 64 KB per call (`truncated: true` past that), in `text`, which always begins with one line saying who added it and when, and that a file i…
create_elementCreate one new element of `type` in the world named by your API-Key header. `type` is a slug from `list_element_types` (e.g. "character"). `element` is the field payload: `name` plus any scalar, link, or extension fields for that type (call `get_element_schema(type)` for the fie…
update_elementUpdate an existing element by `type` and `id`, changing ONLY the fields you pass; omitted fields are kept. This is the same partial update as `PATCH /api/v2/{type}/{id}`: each field you pass replaces that field's value whole. A text field you pass is set (pass an empty string `"…
edit_linksAdd and/or remove links on ONE multi-link `field` of an element, leaving the rest of that field's array untouched. Use this for additive/subtractive link edits (unlike `update_element`, which REPLACES a link array). `type` is a slug from `list_element_types`; `id` is the element…
bulk_applyCreate and/or update many elements across any of the 22 types in one call. Each entry in `items` is `{"type": <slug>, "element": <payload>}` with the same payload shape `create_element` takes: an `element` with an `id` UPDATES that id (creating it if absent), an `element` withou…
get_image_upload_ticketGet a ticket to upload ONE image into this world, for an element's `image_url` (Keel #59). The image never passes through this tool: you send its bytes yourself, straight to the image host, with the ticket. Steps: 1. Call this tool. You get `ticket`, `upload_url`, `max_bytes` an…
Headers
| Name | Description |
|---|---|
API-KeyOptional, secret | A world's API key: an ow_w_ write key, an ow_r_ read key, an agent seat's key, or a legacy 10-digit key. The schema tools need no key. |
API-PinOptional, secret | The PIN, needed for writes: your account PIN, or an agent seat's ow_s_ secret. Reads with an ow_w_ or ow_r_ key need no PIN. |
Details
| Endpoint | https://www.onlyworlds.com/mcp (Streamable HTTP) |
| First published | 3 Nov 2026 |
| Last updated | 3 Nov 2026 |
| Registry name | com.onlyworlds/mcp |
More files and documents servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
