---
title: "Ocho developer resources"
description: "The MCP server for AI agents, the public content API with an OpenAPI spec, GraphQL conventions, rate limits, and machine-readable site surfaces."
canonical: https://ocho.bot/developers
last_updated: 2026-08-25
---

# Ocho developer resources

> The MCP server for AI agents, the public content API with an OpenAPI spec, GraphQL conventions, rate limits, and machine-readable site surfaces.

Everything a developer — or an AI agent — needs to work with Ocho programmatically.

## Ocho MCP server

The Ocho platform speaks [Model Context Protocol](https://modelcontextprotocol.io) natively, so agents like Claude and ChatGPT can operate Ocho directly — search your datasets, ask cited questions, and drive workflows — as the signed-in user.

- **Endpoint:** `https://mcp.ocho.bot` (Streamable HTTP transport)
- **Auth:** OAuth 2.1 — the server issues an OAuth challenge at `initialize`; sign in with your Ocho account and the tool list is returned after authorization. There is no anonymous tool access, because every tool operates on your organization’s private knowledge base.
- **Getting access:** MCP access comes with every Ocho workspace. [Request a demo](https://ocho.bot/contact) if your team doesn’t have one yet.

## Public content API

Everything published on this site — blog posts, documentation, categories, search — is readable through a REST API with no authentication. The full surface is described in the OpenAPI 3.1 spec at [https://ocho.bot/openapi.json](https://ocho.bot/openapi.json), with typed schemas, operation IDs, and descriptions on every operation, so it drops straight into LLM function-calling and codegen tooling.

```sh
# Latest blog posts
curl "https://ocho.bot/api/posts?sort=-publishedAt&limit=5"

# One post by slug
curl "https://ocho.bot/api/posts?where[slug][equals]=what-is-agentic-ingestion"

# All documentation pages
curl "https://ocho.bot/api/docs?limit=100"
```

## GraphQL

The same content collections are queryable over GraphQL at `POST /api/graphql`. Introspection is **enabled** — type queries against the live schema, or use the OpenAPI document for the REST shape. Conventions: errors return a typed `errors` array (message + locations); pagination is page-based (`limit`/`page` arguments, `totalPages` and `hasNextPage` on every result set); **versioning policy:** the schema evolves additively and fields are marked `@deprecated` for at least one release before removal (no URL versioning); all query operations are synchronous and read-only, safe to retry. Collections map to types named `Posts`, `Docs`, `Pages`, and `Categories`, each with `docs`-array pagination matching the REST shape. GraphQL requests are rate limited to **120 per IP per 60 seconds**; every GraphQL response carries `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, and `RateLimit-Policy: 120;w=60` headers, with `Retry-After` on a 429.

## Rate limits

REST content reads have no hard per-client limit today — keep sustained traffic under 2 requests/second. `POST /api/graphql` is limited to **120 requests per IP per 60 seconds**, and the one write endpoint, `POST /api/contact`, to **5 requests per IP per 60 seconds**. Both advertise their state on every response:

- `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` — requests allowed, requests left, seconds until the window resets
- `RateLimit-Policy: 5;w=60` — the quota policy itself
- `Retry-After` — on a 429, seconds to wait before retrying

## Machine-readable surfaces

- [https://ocho.bot/llms.txt](https://ocho.bot/llms.txt) — product summary, when-to-use guidance for agents, and a curated link index
- [https://ocho.bot/llms-full.txt](https://ocho.bot/llms-full.txt) — the full documentation corpus as plain text
- **Markdown negotiation** — every public page serves a Markdown variant (with YAML frontmatter) three ways: `Accept: text/markdown` (responses `Vary: Accept`), a `.md` URL suffix (`/index.md` — append `.md` to any page or blog-post URL), or automatically for known AI crawler User-Agents; HTML responses advertise it via a `Link: rel="alternate"` header
- **MCP server card** — [https://ocho.bot/.well-known/mcp/server-card.json](https://ocho.bot/.well-known/mcp/server-card.json) describes the Ocho MCP server for pre-connect discovery
- [https://ocho.bot/sitemap.xml](https://ocho.bot/sitemap.xml) and [https://ocho.bot/blog/rss.xml](https://ocho.bot/blog/rss.xml) — URL inventory and blog feed
- [https://ocho.bot/openapi.json](https://ocho.bot/openapi.json) — this site’s API, as OpenAPI 3.1

Questions, or building an integration? Email hello@ocho.bot — a founder reads it.

---

Ocho — AI knowledge orchestration · [Home](https://ocho.bot/) · [Docs](https://ocho.bot/docs) · [Blog](https://ocho.bot/blog) · [About](https://ocho.bot/about) · [Developers](https://ocho.bot/developers) · [Contact](https://ocho.bot/contact) · [llms.txt](https://ocho.bot/llms.txt)
