Koskamo

DocStar MCP

A hosted MCP server that allows AI agents to search API documentation and call APIs as tools. It supports OAuth sign-in and keeps documentation in sync with code changes, serving as a bridge between API endpoints and AI assistants.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

DocStar MCP logo, by DocStarCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by DocStar
MCP endpoint (Streamable HTTP)
https://mcp.docstar.io/mcp
Vendor documentation

What you can do with it

  • Search API documentation via AI agents
  • Call API endpoints as tools
  • Sync docs with code changes
  • Provide OAuth sign-in for agents

Source and maintenance

Community listingRegistry 1.0.1

Protocol and capabilities

Server
docstar 1.0.0
MCP protocol
2025-06-18
Tools
15 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

# Let your users use your API from their AI assistant DocStar is Walkover's documentation platform. Document your app's API in a DocStar collection and publish it, and that single collection gives you: - Public API docs your users can browse - An MCP URL that works with any AI client (Claude, ChatGPT, Cursor and others) - CLI commands for every endpoint

Tools

15 advertised

search_docstar_docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search DocStar's documentation and guides with a natural-language question, e.g. "how do I add a custom domain to my docs?" or "how does sign-in work on my MCP server?". Returns the most relevant passages with their page URLs. Use it for how-to and concept questions about DocStar. To find an API endpoint to call, use get_docstar_api_docs instead.

search_docstar_docs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query",
    "collectionIds"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "What to look for, e.g. \"how do I send a WhatsApp template message\""
    },
    "collectionIds": {
      "type": "array",
      "items": {
        "enum": [
          "RoNWaspA9p3Z",
          "fLMgydvRdvN7",
          "wAkjF0zqiO2E",
          "R313UmBcMyg_",
          "SO_RDFDAi5WY"
        ],
        "type": "string"
      },
      "description": "Always send exactly these collection ids, unchanged: they are the documentation sites searched."
    }
  }
}
search_docstar_docs annotations
{
  "title": "Search Docstar docs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_docstar_api_docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Browse the DocStar API reference one level at a time, when no dedicated tool on this server does what the user needs. Call it with {} for the top level: the modules (Collections, Pages, Endpoints, Published Versions, MCP Server, FAQs, Changelogs, Webhooks, URL Mappings, ...) with a short description and the endpoints they hold. Call it with `path` set to a module's link to see inside it, and with an endpoint's link ending in ".openapi.yml" to get that endpoint as an OpenAPI file: method, url, headers, query params, path variables, a body example and sample responses. Fetch only the level you need, and reuse what you already fetched.

get_docstar_api_docs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "path": {
      "type": "string",
      "description": "A link from a listing, exactly as given (e.g. \"https://docs.example.com/sms/llms.txt\" or \".../sms/send-sms.openapi.yml\"), or just the path (\"sms\", \"sms/send-sms.openapi.yml\"). Leave it out for the top level."
    }
  }
}
get_docstar_api_docs annotations
{
  "title": "Get Docstar API docs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
call_any_api_of_docstar
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Send a POST, PUT, PATCH or DELETE request to any DocStar API endpoint for the signed-in user and return { status, ok, headers, data }. Use it for changes no dedicated tool covers, once you know the exact endpoint: from the quickstart-docstar skill's recipes, or looked up with get_docstar_api_docs. For GET requests use call_any_read_api_of_docstar. Never guess a URL. Pass the full url with path variables filled in, the method, the headers the endpoint's docs list, query params in `query` (not in the url) and the JSON body in `body`. Send the endpoint's auth header with an empty value "": the user's token is filled in automatically. Never put a token there yourself. Show the user what you're about to send and get a yes before any call that creates, changes, publishes or deletes something.

call_any_api_of_docstar input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url",
    "headers",
    "method"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Full endpoint URL with path variables replaced by real values, e.g. https://api.example.com/users/42. Put query params in `query`, not here."
    },
    "body": {
      "type": "object",
      "description": "JSON request body, as the endpoint's docs show it. Leave it out when the endpoint takes no body.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "query": {
      "type": "object",
      "description": "Query params as name/value pairs; an array sends the param once per item. Example: {\"type\": \"flow\", \"bringflows\": true}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH",
        "DELETE"
      ],
      "type": "string",
      "description": "HTTP method from the endpoint's docs"
    },
    "headers": {
      "type": "object",
      "description": "Request headers as name/value pairs, as the docs list them. Give the auth header (Authorization, proxy_auth_token, x-api-key, ...) an empty value \"\" so the signed-in user's token is filled in; never put a token here yourself. Pass {} when the endpoint needs no headers. Example: {\"proxy_auth_token\": \"\", \"Content-Type\": \"application/json\"}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  }
}
call_any_api_of_docstar annotations
{
  "title": "Write to Docstar API",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
call_any_read_api_of_docstar
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Read from any DocStar API endpoint with a GET request for the signed-in user and return { status, ok, headers, data }. Use it for lookups no dedicated tool covers, once you know the exact endpoint: from the quickstart-docstar skill's recipes, or looked up with get_docstar_api_docs. Never guess a URL. Pass the full url with path variables filled in, the headers the endpoint's docs list, and query params in `query` (not in the url). Send the endpoint's auth header with an empty value "": the user's token is filled in automatically. Never put a token there yourself.

call_any_read_api_of_docstar input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url",
    "headers"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Full endpoint URL with path variables replaced by real values, e.g. https://api.example.com/users/42. Put query params in `query`, not here."
    },
    "query": {
      "type": "object",
      "description": "Query params as name/value pairs; an array sends the param once per item. Example: {\"type\": \"flow\", \"bringflows\": true}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "headers": {
      "type": "object",
      "description": "Request headers as name/value pairs, as the docs list them. Give the auth header (Authorization, proxy_auth_token, x-api-key, ...) an empty value \"\" so the signed-in user's token is filled in; never put a token here yourself. Pass {} when the endpoint needs no headers. Example: {\"proxy_auth_token\": \"\", \"Content-Type\": \"application/json\"}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  }
}
call_any_read_api_of_docstar annotations
{
  "title": "Read from Docstar API",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_organizations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the DocStar organizations (workspaces) the signed-in user belongs to, with each one's id and name (the list is at data.data). Start every DocStar task here: show the user the organizations and ask which one to use, unless there is only one. The chosen id is the orgId every other DocStar tool needs.

list_organizations input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "pageNo": {
      "type": "string",
      "description": "Page number (standard MSG91 pagination; not used by the DocStar UI, inferred). e.g. 1"
    },
    "itemsPerPage": {
      "type": "string",
      "description": "Page size; the DocStar UI uses 50. e.g. 50"
    }
  }
}
list_organizations annotations
{
  "title": "List organizations",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_collections
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List the collections (docs sites) in an organization, with each one's id, name, type and the caller's permission (1 read, 2 read-write). Each collection also has rootParentId: the parent pageId to use with create_page for a top-level page. Get orgId from list_organizations. Pass exclude=runCollection,environment to keep the response small. Ask the user which collection to work in.

list_collections input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId"
  ],
  "properties": {
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "exclude": {
      "type": "string",
      "description": "Comma-separated list of collection columns to exclude from the response (e.g. large JSON fields). e.g. runCollection,environment"
    }
  }
}
list_collections annotations
{
  "title": "List collections",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_mcp_server
Advertised by the server during the last successful anonymous check.
Open-world

Get a collection's MCP server: the url end users connect to, ready-to-paste snippets (a Claude Code command and a JSON config), callbackUrls for the OAuth app, the sign-in setup and any custom domain. Creates the server if it's missing and syncs its tools with the published endpoints. Call it after publishing to hand the user their MCP URL.

get_mcp_server input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "collectionId"
  ],
  "properties": {
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "collectionId": {
      "type": "string",
      "description": "The collectionId path variable"
    }
  }
}
get_mcp_server annotations
{
  "title": "Get MCP server",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
create_collection
Advertised by the server during the last successful anonymous check.
Advertised destructive

Creates a new documentation collection in the organization together with its invisible root page (type 0), auto-assigns collection permissions to all org users based on their roles, and auto-provisions an MCP server for it in the background. The returned rootParentId is the page id under which top-level pages are created (via Create Page). SSO read-only organizations that already have a collection get 403. Slug is permanent; if omitted it is derived from the name. A chosen slug that is taken returns 409, and a chosen slug that is one of docstar-cli's own commands (reserved) returns 400. A body that fails validation returns 400 with the Joi message. Body fields: name (string, required) - Collection name, 3-55 characters. If the organization already has a collection with the same name (or a name like "name_N"), a numeric suffix is appended to the stored name (for example "Docs_2") instead of an error. slug (string, optional) - Permanent URL-safe identifier: lowercase letters, numbers and underscores only (no hyphens or spaces; 2-50 chars). Cannot be changed later. It is what docstar-cli (`docstar-cli ...`) and the MCP URL are built on, so these reserved words can't be chosen (400 "This slug is reserved, please choose another one"): alias, auth, clean, complete, completion, completion-script, config, help, init, key, list, login, logout, mcp. If omitted it is derived from the name (every run of other characters becomes an underscore), with a random suffix added when that slug is already taken or reserved. description (string, optional) - Collection description (null or empty allowed). isPublic (boolean, optional) - Accepted but ignored on create: a new collection is always created with isPublic true. Use Update Collection to change it. type (string, optional) - Collection type: 'page' (default, documentation pages), 'api' (API reference), 'blog', or 'embed'. customDomain (string, optional) - Custom domain to serve the public docs on, e.g. docs.example.com. Must be unique. path (string, optional) - Path prefix under the custom domain, e.g. 'api'. theme (string, optional) - Theme/brand color hex string, default '#f2994a'. favicon (string, optional) - Favicon URL. gtmId (string, optional) - Google Tag Manager ID. docProperties (object, optional) - Free-form doc settings object, e.g. {"languages":["hi","fr"]} for AI translations. environment (object, optional) - Accepted but ignored on create: the stored environment is always null. Set it with Update Collection. meta (object, optional) - Free-form metadata object. orgDetails (object, optional) - Organization display details object (overwritten with the organization name on create). runCollection (object, optional) - Landing page (run collection) data object. uniqueTabId (string, optional) - Optional browser tab id used only to suppress the realtime socket echo to the calling tab; agents can omit it. POST https://api.docstar.io/orgs/:orgId/collections

create_collection input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "e.g. Payments API Docs"
    },
    "slug": {
      "type": "string",
      "description": "e.g. payments_api_docs"
    },
    "type": {
      "type": "string",
      "description": "e.g. api"
    },
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "description": {
      "type": "string",
      "description": "e.g. Public docs for the Payments API"
    }
  }
}
create_collection annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
create_endpoint
Advertised by the server during the last successful anonymous check.
Advertised destructive

Creates a new API endpoint doc (page type 4, draft) as the last child of the given page. Requires READ_WRITE permission. Publish it afterwards with Update Endpoint State (parent page must be published). Body fields: name (string, optional) - Endpoint title shown in docs. urlName (string, optional) - URL slug; derived from name if omitted and made unique. requestType (string, optional) - HTTP method: GET, POST, PUT, PATCH, DELETE, etc. URL (string, optional) - Request URL (may contain {{variables}}). description (string, optional) - Endpoint description (HTML/text). body (object, optional) - Request body definition, e.g. {"type":"JSON","raw":{"rawType":"JSON","value":"{...}"}}; type can be none, JSON, TEXT, XML, HTML, multipart/form-data, application/x-www-form-urlencoded. headers (object, optional) - Headers keyed by name: {"Authorization":{"checked":"true","value":"Bearer {{token}}","description":""}}. params (object, optional) - Query params keyed by name, same shape as headers. pathVariables (object, optional) - Path variables keyed by index: {"0":{"checked":"notApplicable","key":"id","value":"","description":"Payment id"}}. bodyDescription (object, optional) - Per-field body docs: {"amount":{"value":100,"type":"number","description":"Amount in cents"}}. sampleResponse (array, optional) - Sample responses: [{"title":"Success","status":200,"description":"","data":{...}}]. authorizationData (object, optional) - Auth config object (or null). preScript (string, optional) - Pre-request JavaScript. postScript (string, optional) - Post-response test JavaScript. docViewData (array, optional) - Order of doc sections, e.g. [{"type":"host"},{"type":"body"},...]; default set if omitted. state (number, optional) - 0 pending, 1 draft (default), 2 approved, 3 rejected. Use Update Endpoint State to publish. uniqueTabId (string, optional) - Optional browser tab id used only to suppress the realtime socket echo to the calling tab; agents can omit it. POST https://api.docstar.io/orgs/:orgId/pages/:pageId/endpoints

create_endpoint input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "pageId"
  ],
  "properties": {
    "URL": {
      "type": "string",
      "description": "e.g. https://api.example.com/v1/payments/:customerId"
    },
    "body": {
      "type": "object",
      "description": "e.g. {\"type\":\"JSON\",\"raw\":{\"rawType\":\"JSON\",\"value\":\"{\\\"amount\\\":100,\\\"currency\\\":\\\"USD\\\"}\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "name": {
      "type": "string",
      "description": "e.g. Create Payment"
    },
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "pageId": {
      "type": "string",
      "description": "The pageId path variable"
    },
    "params": {
      "type": "object",
      "description": "e.g. {\"currency\":{\"checked\":\"true\",\"value\":\"USD\",\"description\":\"ISO currency code\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "headers": {
      "type": "object",
      "description": "e.g. {\"Content-Type\":{\"checked\":\"true\",\"value\":\"application/json\",\"description\":\"\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "description": {
      "type": "string",
      "description": "e.g. Creates a payment for a customer"
    },
    "requestType": {
      "type": "string",
      "description": "e.g. POST"
    },
    "pathVariables": {
      "type": "object",
      "description": "e.g. {\"0\":{\"checked\":\"notApplicable\",\"key\":\"customerId\",\"value\":\"\",\"description\":\"Customer id\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "sampleResponse": {
      "type": "array",
      "items": {},
      "description": "e.g. [{\"title\":\"Success\",\"status\":200,\"description\":\"\",\"data\":{\"id\":\"pay_1\",\"status\":\"created\"}}]"
    }
  }
}
create_endpoint annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
update_endpoint
Advertised by the server during the last successful anonymous check.
Advertised destructive

Partially updates an API endpoint doc; send only fields to change (same fields as Create Endpoint). Any update moves a non-pending endpoint back to draft (state 1), so republish with Update Endpoint State. Requires READ_WRITE permission. Only works for type 4/5 items (otherwise 400 "Wrong Route"). Invalid fields return 400 with the validation message. Body fields: name (string, optional) - Endpoint title shown in docs. urlName (string, optional) - New URL slug; made unique among siblings. Left unchanged if omitted (it is not re-derived from name). requestType (string, optional) - HTTP method: GET, POST, PUT, PATCH, DELETE, etc. URL (string, optional) - Request URL (may contain {{variables}}). description (string, optional) - Endpoint description (HTML/text). body (object, optional) - Request body definition, e.g. {"type":"JSON","raw":{"rawType":"JSON","value":"{...}"}}; type can be none, JSON, TEXT, XML, HTML, multipart/form-data, application/x-www-form-urlencoded. headers (object, optional) - Headers keyed by name: {"Authorization":{"checked":"true","value":"Bearer {{token}}","description":""}}. params (object, optional) - Query params keyed by name, same shape as headers. pathVariables (object, optional) - Path variables keyed by index: {"0":{"checked":"notApplicable","key":"id","value":"","description":"Payment id"}}. bodyDescription (object, optional) - Per-field body docs: {"amount":{"value":100,"type":"number","description":"Amount in cents"}}. sampleResponse (array, optional) - Sample responses: [{"title":"Success","status":200,"description":"","data":{...}}]. authorizationData (object, optional) - Auth config object (or null). preScript (string, optional) - Pre-request JavaScript. postScript (string, optional) - Post-response test JavaScript. docViewData (array, optional) - Order of doc sections, e.g. [{"type":"host"},{"type":"body"},...]. state (number, optional) - 0 pending, 1 draft, 2 approved, 3 rejected. Accepted, but the server sets state 1 (draft) on every update unless the endpoint is currently pending (0). Use Update Endpoint State to publish. uniqueTabId (string, optional) - Optional browser tab id used only to suppress the realtime socket echo to the calling tab; agents can omit it. PUT https://api.docstar.io/orgs/:orgId/endpoints/:endpointId

update_endpoint input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "endpointId"
  ],
  "properties": {
    "URL": {
      "type": "string",
      "description": "e.g. https://api.example.com/v1/payments"
    },
    "body": {
      "type": "object",
      "description": "e.g. {\"type\":\"JSON\",\"raw\":{\"rawType\":\"JSON\",\"value\":\"{\\\"amount\\\":100,\\\"currency\\\":\\\"USD\\\"}\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "name": {
      "type": "string",
      "description": "e.g. Create Payment"
    },
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "params": {
      "type": "object",
      "description": "e.g. {}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "headers": {
      "type": "object",
      "description": "e.g. {\"Content-Type\":{\"checked\":\"true\",\"value\":\"application/json\",\"description\":\"\"}}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "endpointId": {
      "type": "string",
      "description": "The endpointId path variable"
    },
    "description": {
      "type": "string",
      "description": "e.g. Creates a new payment for a customer"
    },
    "requestType": {
      "type": "string",
      "description": "e.g. POST"
    },
    "pathVariables": {
      "type": "object",
      "description": "e.g. {}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "sampleResponse": {
      "type": "array",
      "items": {},
      "description": "e.g. [{\"title\":\"Success\",\"status\":200,\"description\":\"\",\"data\":{\"id\":\"pay_1\"}}]"
    }
  }
}
update_endpoint annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
create_page
Advertised by the server during the last successful anonymous check.
Advertised destructive

Creates a new page as the last child of the page given in the path. Pass the collection's rootParentId (invisible root, from List Collections) to create a top-level page (type 1, parent page/module); pass any other page id to create a subpage (type 3). The type is decided by the parent, not the body. New pages start as draft (state 1); passing state 2 publishes immediately (parent must already be published) and returns publicUrl. Requires READ_WRITE permission. To write the page body afterwards use Update Page Content. Body fields: name (string, required) - Page title (min 1 char). urlName (string, optional) - URL slug (min 3 chars); made unique among siblings. Derived from name if omitted. contents (string, optional) - Legacy initial HTML/text contents column (editor content is stored in doc-rtc; prefer Update Page Content). state (number, optional) - 0 pending, 1 draft (default), 2 approved/published (publishes right away; parent must be published), 3 rejected. meta (object, optional) - Page metadata object (e.g. {"description":"...","tags":["setup"]}); may include editable boolean. sharingMeta (object, optional) - Sharing settings object, e.g. {"editable":true}. pageType (number, optional) - Accepted (1 or 3) but ignored; the type is derived from the parent page. uniqueTabId (string, optional) - Optional browser tab id used only to suppress the realtime socket echo to the calling tab; agents can omit it. POST https://api.docstar.io/orgs/:orgId/pages/:pageId

create_page input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "pageId"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "e.g. Getting Started"
    },
    "orgId": {
      "type": "string",
      "description": "Organization (company) ID of the current workspace"
    },
    "state": {
      "type": "number",
      "description": "e.g. 1"
    },
    "pageId": {
      "type": "string",
      "description": "12-character id of the PARENT page (rootParentId for a top-level page)"
    },
    "urlName": {
      "type": "string",
      "description": "e.g. getting-started"
    },
    "contents": {
      "type": "string",
      "description": "e.g. content in markdown"
    }
  }
}
create_page annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
publish_pages
Advertised by the server during the last successful anonymous check.
Advertised destructive

Publishes many pages/endpoints at once: each page in pageIds gets a new default published version and state 2 (approved/published). rootParentId (the collection's invisible root page) must also be supplied so it is marked published. Requires READ_WRITE permission. Triggers background search indexing, translation and AI SEO/meta generation, and clears the docs cache. Get ids from List Collections (rootParentId) and List Collection Pages. Body fields: rootParentId (string, required) - 12-char id of the collection's invisible root page (type 0). pageIds (array<string>, required) - Non-empty array of 12-char page/endpoint ids to publish. PATCH https://api.docstar.io/orgs/:orgId/collections/:collectionId/bulkPublish

publish_pages input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "collectionId"
  ],
  "properties": {
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "pageIds": {
      "type": "array",
      "items": {},
      "description": "e.g. [\"Pg12Ab34Cd56\",\"Pg98Zy76Xw54\"]"
    },
    "collectionId": {
      "type": "string",
      "description": "The collectionId path variable"
    },
    "rootParentId": {
      "type": "string",
      "description": "e.g. Xy12Ab34Cd56"
    }
  }
}
publish_pages annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
list_collection_pages
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns all non-deleted pages of a collection (the full sidebar tree, flat) with id, name, urlName, type, parentId, child (ordered child ids), state, isPublished, meta, sharingMeta and the endpoint requestType for endpoint pages. Page types: 0 invisible root, 1 parent page/module (top-level), 3 subpage, 4 API endpoint, 5 example/sample request of an endpoint. States: 0 pending, 1 draft, 2 approved/published, 3 rejected. Use it to find pageIds and the hierarchy. Collection must belong to the caller's org. GET https://api.docstar.io/orgs/:orgId/collection/:collectionId/pages

list_collection_pages input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "orgId",
    "collectionId"
  ],
  "properties": {
    "orgId": {
      "type": "string",
      "description": "The orgId path variable"
    },
    "collectionId": {
      "type": "string",
      "description": "The collectionId path variable"
    }
  }
}
list_collection_pages annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
send_feedback_to_docstar
Advertised by the server during the last successful anonymous check.
Advertised destructive

Sends feedback straight to the DocStar team. Use it when the user wants to report a bug, request a feature, flag wrong or missing docs, or share praise about DocStar or this MCP server. Write the message in the user's words and add any useful context, such as the tool or endpoint involved and what went wrong. Who sent it (user and organization) is taken from the signed-in user's token, never from the body. Returns 200 once delivered; 400 for an invalid body; 502 if it couldn't be delivered, in which case tell the user and try again later. Authenticate with the proxy_auth_token header (an `Authorization: Bearer hm_...` DocStar API token or a DocStar JWT is also accepted). Body fields: message (string, required) - The feedback, 1 to 5000 characters.type (string, optional) - One of bug, feature_request, docs, praise, other; default other.collectionId (string, optional) - The collection the feedback is about, if any.context (object, optional) - Extra details, e.g. the tool or endpoint used, the request and the error. POST https://api.docstar.io/feedback/ai

send_feedback_to_docstar input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "type": {
      "type": "string",
      "description": "e.g. bug"
    },
    "context": {
      "type": "object",
      "description": "e.g. {\"tool\":\"get_docstar_mcp_api_docs\"}",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "message": {
      "type": "string",
      "description": "e.g. get_api_docs didn't list the MCP Server module's new endpoints"
    },
    "collectionId": {
      "type": "string",
      "description": "e.g. RoNWaspA9p3Z"
    }
  }
}
send_feedback_to_docstar annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
quickstart-docstar
Advertised by the server during the last successful anonymous check.
Advertised read-only

Document the user's API in DocStar and keep it in sync. Load before any Docstar task. Call this to load the full instructions for this skill before doing the task.

quickstart-docstar input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
quickstart-docstar annotations
{
  "title": "Quickstart Docstar",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
6585 ms
95th percentile latency
6585 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 6585 ms · metadata changed · 15 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http docstar-mcp https://mcp.docstar.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add docstar-mcp --url https://mcp.docstar.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable docstar-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "docstar-mcp": {
      "url": "https://mcp.docstar.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "docstar-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.docstar.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start docstar-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "docstar-mcp": {
      "type": "http",
      "url": "https://mcp.docstar.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http docstar-mcp https://mcp.docstar.io/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "docstar-mcp": {
      "url": "https://mcp.docstar.io/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "docstar-mcp": {
      "serverUrl": "https://mcp.docstar.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like DocStar MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.