Blog · 2026-11-02

Build and ship your own MCP connector from the chat

Write an MCP server with defineMcp, set connector true, and deploy it from Claude or ChatGPT via the DenkOps connector. OAuth sign-in is hosted.

With the DenkOps connector in your assistant, you can do more than operate apps: you can build a connector of your own and put it in front of your team or your customers, without leaving the chat. The assistant writes the MCP server, deploys it on DenkOps, and DenkOps hosts the OAuth sign-in for everyone who connects to it.

What does a connector on DenkOps consist of?

Three things, and you write only the first:

  1. An MCP server. A few tools built with defineMcp from @denkopsai/sdk/mcp. The SDK serves the MCP protocol for you, including the stateless 2026-07-28 revision.
  2. "connector": true in denkops.json. This turns on hosted OAuth: discovery, client registration, the sign-in and consent pages, and per-user tokens.
  3. A URL. After the deploy your connector lives at https://<slug>.denkops.host/mcp, ready to paste into Claude, ChatGPT or any MCP client.

How do I build one from the chat?

With the DenkOps connector added to your assistant (setup per assistant), ask something like:

> Build an MCP server on DenkOps with a tool that looks up an order by id in our API, and make it a connector.

The assistant reads the DenkOps build guide through the connector, writes index.ts with defineMcp, adds denkops.json with "connector": true, and calls deploy with those files. A minimal server looks like this:

import { defineMcp } from "@denkopsai/sdk/mcp";
import { z } from "zod";

export default defineMcp({
  name: "orders",
  version: "1.0.0",
  tools: {
    get_order: {
      description: "Look up an order by id.",
      input: z.object({ id: z.string() }),
      handler: async ({ id }) => ({ id, status: "shipped" }),
    },
  },
});

API keys for your own backend go into environment variables, which the assistant sets with a separate call; they never travel in the upload.

Who can connect to it?

You decide per connector:

  • Workspace members only (the default),
  • an email allowlist, for customers or partners,
  • public, for a connector anyone may use,
  • and optionally email and password accounts for people without Google or GitHub.

Everyone signs in as themselves, and you can revoke any connection.

Can it carry my brand?

Yes. Give the connector your own icon and brand colours, and the sign-in and consent pages DenkOps hosts for it use them. Add a branding block to denkops.json (an icon file, an accent colour and a background colour) or ask your assistant to set it. Text colour is picked automatically for contrast, and a small "Secured by DenkOps" link stays on every page.

Why host it on DenkOps instead of serverless?

An MCP connector is a long-lived, authenticated service. On DenkOps it runs in an always-on slot with logs, traces, metrics and one-command rollback, and the OAuth layer, the part most teams get stuck on, is already done. Read more in MCP connectors for clients and one connector, every client.

FAQ

Do I need to write OAuth code for my connector?

No. Setting connector to true in denkops.json makes DenkOps host discovery, client registration, sign-in, consent and tokens. Your MCP server only sees authenticated requests.

Can I build and deploy a connector without a terminal?

Yes. With the DenkOps connector in Claude, ChatGPT or another assistant, the assistant writes the files and deploys them; you never run a command.

Which clients can use my connector?

Every client that supports remote MCP servers with OAuth: Claude, Claude Code, ChatGPT, Gemini, Grok, Cursor and others.

Ship it yourself: bunx denkops deploy or say "deploy on DenkOps" from your coding agent.

Start on DenkOps →

← "Per-client isolation: separate secrets, domain, OAuth and logs" · DenkOps is now a connector for Claude, ChatGPT, Gemini and Grok →