Duey AIMCP Server

    Use Duey from inside Claude, ChatGPT, or Cursor.

    Schedule, preview, pause, and cancel Duey Sessions — the cloud writer that types your draft into Google Docs with a realistic edit history — plus the Duey Humanizer and AI detector. Install in two clicks — OAuth handles auth, no API keys to manage.

    Server URL
    https://app.duey.ai/api/mcp

    Cursor

    Install in Cursor

    One-click install. Cursor will open and prompt you to confirm.

    Or paste into ~/.cursor/mcp.json
    {
      "mcpServers": {
        "duey": {
          "url": "https://app.duey.ai/api/mcp"
        }
      }
    }

    Claude Desktop / Code

    In Claude Desktop: Settings → Connectors → Add custom connector → paste the server URL above. Or drop this JSON into ~/.claude.json (Code) / the desktop client config.

    ~/.claude.json (Claude Code)
    {
      "mcpServers": {
        "duey": {
          "type": "http",
          "url": "https://app.duey.ai/api/mcp"
        }
      }
    }

    ChatGPT / OpenAI

    Setup must be done in the web version of ChatGPT (chatgpt.com). Open Settings → Apps → Advanced settings, enable Developer mode, then Create app: give it a title, paste the server URL above, tick “I understand and want to continue”, and click Create. Once created, the connector is available across ChatGPT on web, desktop, and mobile. OpenAI Responses API can also connect to the same URL directly.

    OpenAI Responses tools[]
    {
      "type": "mcp",
      "server_label": "duey",
      "server_url": "https://app.duey.ai/api/mcp",
      "require_approval": "never"
    }

    What your LLM can do

    Twelve tools, scoped to your account. The LLM never sees your Google password — Duey holds the Drive credentials.

    • create_sessionSchedule a Duey Session over hours, days, or weeks.
    • preview_sessionCheck when a session would finish before creating it.
    • list_sessionsShow all your scheduled, running, and completed sessions.
    • get_session_statusCheck progress on a specific session.
    • cancel_sessionCancel a scheduled or running session.
    • pause_sessionPause a scheduled or running session.
    • resume_sessionResume a paused session; the deadline shifts by the pause length.
    • list_recent_docsList your recently-touched Google Docs to attach to a session.
    • get_session_transcriptRead the source text that a session is typing into Google Docs.
    • humanize_textRewrite AI-generated text to read as human-written (100–5000 words).
    • detect_ai_textScore whether text reads as AI-written. Primary detector with backup fallback.
    • get_account_statusRead your subscription tier, free trial state, and Drive connection status.

    For AI agents

    How an assistant should use these tools. Agents can read the same guide as plain Markdown at app.duey.ai/mcp.md.

    1. 1.Check the account first. Call get_account_status when you don't know the user's plan or whether Google Drive is connected. If Drive isn't connected, send the user to https://app.duey.ai/sessions to connect it — tools that write to Google Docs fail until they do.
    2. 2.Get the deadline right. Ask for (or infer) the deadline and pass it as ISO 8601 with the user's UTC offset in deadline_at. If the user says when writing may happen, pass work_hours with their IANA timezone (paid plans only).
    3. 3.Preview before you commit. Call preview_session with the same arguments before create_session when the deadline is tight or the user asks whether it will finish in time. If it reports feasible: false, suggest a later deadline.
    4. 4.Keep the formatting. Pass format: "markdown" to create_session whenever the text has headings, lists, bold or italics, so they become real Google Docs formatting instead of symbols.
    5. 5.Write into the right doc. To add to an existing doc, find it with list_recent_docs and pass its document_id as existing_document_id. Otherwise a new doc is created.
    6. 6.Manage running sessions. Use list_sessions, get_session_status, pause_session, resume_session and cancel_session. Resuming shifts the rest of the schedule and the deadline by the pause length.
    7. 7.Humanizer and detector. humanize_text takes 100–5000 words; free accounts get one run per day. Use detect_ai_text before and after to check the result.
    8. 8.Handle errors. Failures return { ok: false, error, message } with a stable error code (below). Relay the message, and any upgrade_url or connect_url, to the user rather than retrying.

    Prompts

    • schedule_writing — Guided flow: check the account, preview the deadline, create the session.
    • humanize_and_check — Score text, humanize it if needed, and re-check.
    Error codes (25)
    drive_not_connectedGoogle Drive isn't connected. Send the user to connect_url.
    missing_deadlineNormal mode needs deadline_at.
    invalid_deadlinedeadline_at isn't valid ISO 8601.
    invalid_work_hoursEnd hour not after start hour, or unknown timezone.
    plan_errorThe schedule can't be built, e.g. the deadline is too close. Suggest a later one.
    free_trial_exhaustedThe free Session trial is used up. Share upgrade_url.
    free_tier_limitFree trial limit hit (length or mode). Share upgrade_url.
    asap_paid_requiredASAP mode needs a paid plan. Use a deadline instead.
    asap_in_flightAn ASAP session is already running.
    not_foundNo session with that id for this user.
    not_pausableOnly scheduled or running sessions can be paused.
    not_pausedOnly paused sessions can be resumed.
    docs_errorGoogle Docs rejected the write. retryable says whether to try again.
    payment_requiredFree Humanizer tries used up for today. Share subscribe_url.
    invalid_word_counthumanize_text needs 100–5000 words.
    moderation_blockedThe text was refused by content moderation.
    rate_limitedToo many calls. Wait retry_after_seconds (or the Retry-After header).
    detector_unavailableBoth AI detectors failed. Try again later.
    drive_errorGoogle Drive couldn't list the user's docs. Try again later.
    no_source_textThat session has no stored source text.
    decrypt_failedStored source text couldn't be read (server-side issue).
    parse_failedhumanize_text couldn't split the text into paragraphs. Clean up the formatting.
    humanizer_failedThe Humanizer errored mid-run. Try again.
    empty_resultThe Humanizer returned nothing. Try again.
    internal_errorUnexpected failure. Apologize and try again later.

    How auth works

    Duey speaks the standard OAuth 2.1 + PKCE handshake (RFC 6749 / 7636) plus Dynamic Client Registration (RFC 7591), so any MCP-compliant client can connect without us pre-issuing credentials. The first time your LLM client connects you'll see a Duey consent screen — approve once, and the client gets a refresh token tied to your account.

    Already approved a client? Manage or revoke connections in Settings →

    For LLMs and indexers

    • Protected resource metadata: /.well-known/oauth-protected-resource
    • Authorization server metadata: /.well-known/oauth-authorization-server
    • JWKS: /.well-known/jwks.json
    • MCP descriptor: /.well-known/mcp.json

    Need help? Email [email protected].