Use AI to manage your job board with Cavuno MCP

Connect Claude, Cursor, Codex, and other MCP clients to your Cavuno job board.

The Cavuno MCP server is a hosted Cloudflare Worker at mcp.cavuno.com. It lets AI agents like Claude, Cursor, and Codex drive the Cavuno API without any per-endpoint MCP tool registration — there is no npm package to install, just an HTTPS URL. The public Cavuno MCP repository contains connection examples and issue tracker details, plus registry metadata; the hosted server implementation is not published there.

The authenticated Operator MCP endpoint at mcp.cavuno.com/mcp exposes exactly two tools, regardless of how many REST endpoints exist:

  • search — runs JavaScript against the Cavuno OpenAPI spec for endpoint and schema discovery.
  • execute — runs JavaScript that calls the Cavuno API via a sandboxed loopback binding. Multiple calls can be chained in one execution; the final return value and captured console output flow back to the model.

This follows Cloudflare's “code mode” pattern. In Cloudflare's implementation, code-based discovery and execution reduced the tool context needed for a large API. Cavuno applies the same pattern with a two-tool surface; results still depend on the client, model, and task.

Choose a job board resource

Use the resource references when you need exact discovery prompts, write patterns, and safety boundaries:

  • Jobs — create, update, publish, pause, expire, duplicate, delete, and review job listings.
  • Companies — find, create, update, and delete company records.
  • Blog posts — audit, draft, update, and publish job board articles.
  • Blog authors and tags — manage article ownership and organization.
  • Taxonomies — manage categories, skills, and markets, and read canonical remote permits and timezones.
  • Settings — inspect and change supported job board configuration.
  • Domains — inspect domain state and verification data.
  • Google Search Console — query finalized search performance and inspect Google's indexed version of Board URLs.
  • Media — understand media metadata and the upload boundary.
  • Operations — follow asynchronous work to completion.
  • API keys — list key metadata without exposing plaintext secrets.
  • Audit logs — verify who changed what and when.
  • Usage and limits — inspect quotas before bulk work.
  • Authentication and security — choose OAuth or API keys and protect credentials.
  • Limitations — understand outbound network, files, and execution constraints.

See what you can do with it

The MCP cookbook starts with the outcome rather than API paths. Use it to post a job, publish or refresh blog content, research a content strategy, sync jobs from a careers page, or build a custom job scraper. The agent discovers the relevant endpoints and record IDs from Cavuno for you.

When a task also needs a browser, scraper, spreadsheet, or an unsupported third-party platform, that access comes from your AI client or another connector. Google Search Console is the exception documented above: after it is connected in Cavuno, MCP can use its native Board-bound performance and URL Inspection reads.

Connect a client

Add Cavuno to your MCP-aware editor. Clients that support remote MCP OAuth can open a browser so you can sign into Cavuno and approve access. Cavuno currently grants the single full_access scope. Configuration, token storage, and refresh behavior vary by client.

Claude Desktop

Remote MCP servers cannot be added directly through claude_desktop_config.json. In Claude Desktop, open Settings → Connectors, choose Add custom connector, and enter https://mcp.cavuno.com/mcp. Availability can depend on your Claude plan. See Anthropic's remote connector guide for the current interface.

Cursor

Edit ~/.cursor/mcp.json:

Codex

Add the server to ~/.codex/config.toml (or the project-level .codex/config.toml for a trusted project):

ChatGPT Developer mode

Turn on Developer mode in ChatGPT, then add https://mcp.cavuno.com/mcp as a custom MCP app. ChatGPT uses a Client ID Metadata Document as its client_id when Cavuno advertises client_id_metadata_document_supported. Cavuno fetches that HTTPS document and treats ChatGPT as a public PKCE client. You do not paste a client ID or secret.

Claude Code

Authentication

Two paths are supported. OAuth is the right choice for interactive use; an API key is the right choice for CI / automation that doesn't have a browser.

OAuth 2.1 (default)

The MCP spec runs the standard OAuth authorization-code flow with PKCE. On first connect, the client:

  1. Fetches https://mcp.cavuno.com/.well-known/oauth-protected-resource/mcp and discovers the authorization server (api.cavuno.com/v1/oauth).
  2. Reads authorization-server metadata. Clients that support Client ID Metadata Documents send an HTTPS metadata URL as client_id when client_id_metadata_document_supported is true. Other clients use dynamic registration at /v1/oauth/register.
  3. Opens a browser to /v1/oauth/authorize for user consent. The minted JWT is bound to the Cavuno MCP resource (aud=https://mcp.cavuno.com/mcp).
  4. Sends every subsequent request with Authorization: Bearer <jwt>.

The worker verifies the JWT’s issuer, audience, and signature through the authorization server’s JWKS before invoking a tool.

Cavuno treats CIMD clients as public PKCE clients (token_endpoint_auth_method: none). Dynamic registration also accepts client_secret_basic, client_secret_post, and public clients using none. Cavuno does not implement private_key_jwt. If a metadata document offers both none and private_key_jwt, Cavuno uses none.

API key (CI / scripts)

Mint a key in the Cavuno dashboard at Settings → Developer → API keys. Pass it as the bearer token — MCP clients that support custom request headers can attach it directly:

API keys beginning with cavuno_live_ skip the OAuth flow entirely—the worker passes them through unchanged.

The two tools

Both tools take a single argument: code, the source of an async () => … arrow function. The function runs in a fresh Cloudflare Dynamic Worker isolate per call — there is no shared state across invocations.

search

execute

The spec object that search sees is the same OpenAPI document published at api.cavuno.com/v1/openapi.json — also visible in the interactive API reference. execute can call authenticated Operator API endpoints that accept JSON or multipart form data. Endpoints that require a different authentication context remain outside this MCP surface.

Sandbox & limits

  • Outbound network from inside the sandbox is blocked (globalOutbound: null). The only way out is cavuno.request(…); calling fetch(…) throws.
  • No access to environment variables, file system, or persistent storage. Each invocation starts in a fresh isolate.
  • console.log/warn/error is captured and returned alongside the function's return value, so multi-step scripts can print intermediate state for debugging.
  • CPU and wall-clock budgets are bounded by the underlying Cloudflare Workers limits — keep individual execute calls under a few seconds.
  • cavuno.request accepts FormData for multipart endpoints such as POST /v1/media/upload. File bytes must already be available inside the invocation because the sandbox cannot read the local filesystem. Do not set Content-Type; Cavuno generates the multipart boundary.

Errors

When user code throws (or returns a rejected promise), the response is a structured error envelope rather than a tool failure. The captured console output is included so the agent can self-diagnose without re-running:

API-level errors (4xx / 5xx) come back from cavuno.request as { status, ok: false, data: { error: { code, message, requestId, details? } } } — the agent can branch on data.error.code rather than parsing strings.