AI agents

Build with AI

Give coding assistants a stable, read-only view of Tyxter docs, public OpenAPI schema, and launch-critical integration guidance.

Use local URLs while developing against the Docker stack, and production URLs when an agent is generating integration code for a hosted app.
Generate integrations only from Tyxter discovery surfaces: /.well-known/tyxter.json, /.well-known/api-catalog, /openapi.json, /llms.txt, and /mcp. Public API calls use the advertised /v1/* routes.
In customer apps and scripts, name the API origin variable TYXTER_API_BASE_URL. For production, set it to https://api.tyxter.com; avoid generic site-base variables for API calls.

Discovery

Agents can start from the dashboard origin and still find the canonical docs artifacts. The dashboard host passes through the top-level docs files and exposes the API-owned well-known manifest.

Discovery: https://tyxter.com/.well-known/tyxter.json
API catalog: https://tyxter.com/.well-known/api-catalog
Production API base: https://api.tyxter.com
OpenAPI: https://tyxter.com/docs/openapi.json
LLM index: https://tyxter.com/docs/llms.txt
MCP: https://tyxter.com/docs/mcp

Artifacts

Cursor

Reference the concise docs index or the full bundle in project rules.

Tyxter docs: https://tyxter.com/docs/llms.txt
Full Tyxter docs: https://tyxter.com/docs/llms-full.txt
OpenAPI: https://tyxter.com/docs/openapi.json

Claude Code

Add the MCP endpoint for searchable docs and OpenAPI retrieval.

{
  "mcpServers": {
    "tyxter-docs": {
      "type": "http",
      "url": "https://tyxter.com/docs/mcp"
    }
  }
}

Codex

Point Codex at the same docs origin that serves this page.

Docs: https://tyxter.com/docs/llms.txt
Full docs: https://tyxter.com/docs/llms-full.txt
OpenAPI: https://tyxter.com/docs/openapi.json
MCP: https://tyxter.com/docs/mcp

Generic MCP clients

{
  "servers": {
    "tyxter-docs": {
      "type": "http",
      "url": "https://tyxter.com/docs/mcp"
    }
  }
}

Tyxter MCP server (your account)

The /mcp endpoint above is the read-only docs MCP server. The Tyxter MCP server is a different, authenticated surface: it is scoped to one project and one environment, and its tools read and operate your account — messages, media, templates, contacts, usage, phone numbers, and broadcasts.

The Tyxter MCP server is served from the API origin, https://api.tyxter.com — never from https://tyxter.com. The apex domain serves the marketing site and has no route under /mcp/p/, so a client pointed there receives an HTML 404 and reports a connection or handshake failure that looks nothing like an authentication problem. Copy the exact URL from the dashboard Connections page, MCP tab.

Authenticate with a Tyxter API key as a bearer token, and match the key prefix to the environment segment in the URL: tx_sandbox_ keys on a /sandbox URL, tx_live_ keys on a /production URL. The two possible mismatches fail differently: a key whose prefix disagrees with the environment the key itself belongs to is refused with 401, while a valid key pointed at a URL whose project or environment segment is not its own is refused with 404 and the code mcp_resource_not_found — deliberately the same answer as a project that does not exist. Claude.ai connects to the same URL over OAuth instead; MCP OAuth access tokens are not valid on public /v1/* routes.

If you are building your own MCP client rather than pasting a key into an existing one, you do not have to register it first. Tyxter advertises client_id_metadata_document_supported in its authorization server metadata at /.well-known/oauth-authorization-server, so you may publish a client metadata document at an HTTPS URL and send that URL as your client_id. Tyxter fetches and validates that document when you call /oauth/authorize, and the redirect_uri you request must be listed in it. Clients identified this way are public clients: authenticate at the token endpoint with none. Dynamic client registration at /oauth/register remains available for clients that need it.

# ~/.codex/config.toml
[mcp_servers.tyxter]
url = "https://api.tyxter.com/mcp/p/default/production"
bearer_token_env_var = "TYXTER_API_KEY"

Replace default with your project slug and production with the environment you want, then export TYXTER_API_KEY before starting the client. A client may show fewer tools in its connection banner than the server offers; the tools/list response on the wire carries the full set.

Modern MCP clients first probe server/discover and then send per-operation JSON-RPC POST requests using protocol 2026-07-28. A 2025-era client keeps using initialize, notifications/initialized, tools/list, and tools/call. Tyxter serves both eras from the same URL and tool definitions. An authenticated plain GET — one that does not ask for an event stream — returns a JSON descriptor of the server: name, dual-era mode, supported protocol revisions, transport, scoped resource, granted scopes, dashboard links, and the tool list.

curl -H "Authorization: Bearer $TYXTER_API_KEY" \
  https://api.tyxter.com/mcp/p/{project-slug}/{environment}

That is the fastest way to confirm a key reaches the project and environment you expect. The descriptor is produced after authentication, so it is not a browser check: a browser cannot attach the bearer token and gets the 401 below instead. A GET that asks for a server-initiated event stream (Accept: text/event-stream) is answered with 405 and an Allow: GET, POST, DELETE header: the endpoint is stateless and never opens a stream of its own, and the protocol requires a server without one to refuse the method. A conforming client falls back to POST and connects normally. Credentials are checked first, so only an authenticated caller ever sees that 405; missing or invalid credentials are answered with 401 on every method, whatever the request asked for.

Structured tool results

Both servers return structured tool results. Every tool that answers with JSON advertises an output schema in its tools/list entry and returns a structuredContent object alongside the JSON text block, so a client can read the structured half directly instead of re-parsing the text. The text block is unchanged and still carries the same bytes, so a client that ignores structured results keeps working exactly as before.

The Tyxter product schemas name and describe each field and advertise its JSON wire type and nullability. They deliberately leave objects open, keep result properties present-when-applicable, and omit narrower value rules such as enums, URL/date formats, ranges, and string lengths: a client that validates a result against a stricter schema than the payload satisfies would fail the call rather than return a readable answer.

The one exception is the docs tool fetch_doc. It returns Markdown prose rather than JSON, so it advertises no output schema and returns its text block alone.

On protocol 2026-07-28, the docs server also marks discovery, tool lists, resource lists, and resource reads as public and cacheable for five minutes. Product-account results stay private and non-cacheable. Older protocol responses do not carry these cache fields.

When to use each resource