Skip to main content
Kai is live on Product Hunt todaythis week!Check us out on Product Hunt (opens in a new tab)

Developers

Kai developer docs

Kai is an AI executive assistant by Morgen for calendar, email, tasks and meetings. This page covers how an AI client or a script talks to it: the two MCP servers, the public endpoints on hirekai.ai, and the spec that describes them.

Two ways in

  • To act on a user's own data (their calendar, email, tasks and meetings), connect Kai's MCP server at https://api.morgen.so/mcp-kai. The user signs in and approves once.
  • To read about Kai (features, comparisons, the blog), use the public endpoints on hirekai.ai or the Content MCP at https://hirekai.ai/mcp. No account, no key.

Kai doesn't have a REST API for account data: everything that touches a user's account goes through the Kai MCP server.

Kai MCP server (user data)

  • Address: https://api.morgen.so/mcp-kai
  • Transport: Streamable HTTP
  • Auth: OAuth 2.1. Your MCP client registers itself and opens Kai's sign-in; the user approves the connection on Kai's consent screen. There's no API key to copy.
  • What it can do: read and manage the user's calendars and events, tasks and tags, email (search, read, draft, and send when the user says so), meeting recordings and notes, triage notifications, booking link and Kai Workflows.

Example: Claude Code

claude mcp add --scope user --transport http kai https://api.morgen.so/mcp-kai

Setup steps for Claude, ChatGPT, Gemini, Cursor and VS Code are on Connect Kai over MCP.

Content MCP (public)

https://hirekai.ai/mcp answers questions about Kai over MCP. It's read-only, needs no auth and holds no user data. It runs stateless: every POST is one JSON-RPC message, with no session id.

  • Tools: search_kai, get_feature, get_product_info, list_blog_posts, get_blog_post, compare_kai_with, get_free_tool
  • Resources: every blog post, feature page and comparison, the knowledge base and the agent skills, as kai:// URIs in markdown
  • Server card: /.well-known/mcp/server-card.json

Initialize

curl -X POST https://hirekai.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0.0"}}}'

Search Kai's content

curl -X POST https://hirekai.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_kai","arguments":{"query":"botless meeting notes","limit":5}}}'

Public endpoints

Everything below is on https://hirekai.ai, and the full definitions (parameters, response schemas, examples) are in /openapi.json (OpenAPI 3.1).

MethodPathWhat it does
GET/api/healthCheck the site is up
GET/llms.txtGet llms.txt
GET/llms-full.txtGet the full knowledge base as text
GET/AGENTS.mdGet the agent integration guide
GET/sitemap.mdList every public page (markdown)
GET/sitemap.xmlList every public page (XML)
GET/openapi.jsonGet this OpenAPI document
GET/.well-known/api-catalogGet the API catalog (RFC 9727)
GET/.well-known/agent-skills/index.jsonList agent skills
GET/.well-known/mcp/server-card.jsonGet the MCP server card
GET/api/md/homeGet the homepage as markdown
GET/{feature}.mdGet a feature page as markdown
GET/compare/{competitor}.mdGet a Kai-vs-competitor comparison as markdown
GET/blog/{slug}.mdGet a blog post as markdown
GET/blog/how-we-grow/{issue}.mdGet a How We Grow issue as markdown
GET/api/md/skills/{name}Get one agent skill's doc
POST/mcpCall the Content MCP (JSON-RPC 2.0)
GET/get-startedSend a person to Kai's sign-up
POST/api/contactSubmit the contact form

Pages as markdown

curl https://hirekai.ai/meetings.md
curl -H "Accept: text/markdown" https://hirekai.ai/

Authentication

  • The public endpoints and the Content MCP: none.
  • The Kai MCP server: OAuth 2.1, run by your MCP client. Access covers the whole Kai account the user approves, so only connect clients the user trusts.
  • Sign-up isn't an API call: send a person to /get-started, which opens the Kai app.

Errors

Any /api/* path that doesn't exist answers with a JSON 404, and so does any missing page requested with Accept: application/json:

curl -s https://hirekai.ai/api/does-not-exist

{
  "error": "not_found",
  "status": 404,
  "message": "No resource at /api/does-not-exist.",
  "hint": "Check the path against https://hirekai.ai/openapi.json, or browse https://hirekai.ai/sitemap.md for pages.",
  "docs": "https://hirekai.ai/developers"
}

Ask for markdown and a missing page returns a short markdown 404 with links to the sitemap, llms.txt and this page. The status is always a real 404, never a 200.

curl -i -H "Accept: text/markdown" https://hirekai.ai/some-page-that-does-not-exist
  • 404: nothing at that path
  • 406 on /mcp: the Accept header must list both application/json and text/event-stream
  • 429: rate limited (see below), with a JSON error message

Rate limits

  • /mcp: 60 requests a minute per network
  • search_kai: at most 20 results a call
  • Static files and markdown pages: served from the CDN, no limit you'll hit

Machine-readable files

Questions or a partnership idea? Use the contact form.