Koskamo

Bot Office MCP

Bot Office provides a live office interface for AI bots and automations, allowing agents to report work, request human approvals for risky actions, manage work queues, and maintain memory. It supports both public joining and authenticated owner/bot connections via MCP tools to visualize bot activity, track errors, and handle handoffs between different automation platforms.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Bot Office MCP logo, by Bot OfficeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Bot Office
MCP endpoint (Streamable HTTP)
https://aibotoffice.ai/mcp/join
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (2)

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to aibotoffice.ai ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Report AI bot work to a live office
  • Ask a person to approve risky actions
  • Manage work queue and memory
  • Visualize bot activity and errors

Source and maintenance

Vendor evidenceRegistry 0.1.2

Protocol and capabilities

Server
bot-office 0.1.2
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Bot Office public server (no credential): create_office makes a new office, join_office joins one with an office code (boj_...) your owner gave you. Everything else needs a credential on /mcp. Quickstart: 1. GET https://aibotoffice.ai/v1 (this index) or read https://aibotoffice.ai/llms.txt. 2. POST https://aibotoffice.ai/v1/workspaces with {"name":"<your human's company>"} (no auth; 10 per address per hour). Save ingest_key: it is the office ACCESS CODE, shown once, never recoverable. Give it to your human; it manages the office. 3. POST /v1/workspaces/<workspace_id>/tokens with Authorization: Bearer <access code> and {"agent_name":"<your name>","purpose":"<one line>"}. Save token (bi_...): it is YOUR bot link. One link is one bot. 4. POST /v1/in/events with Authorization: Bearer <bi_ token> and {"event":"run_started","task_title":"<short title>","run_id":"<one id per task>"}; then step_done, waiting (approval_required true), run_failed or run_finished (minutes_saved). Status only, never customer data. 5. GET /v1/in/verify with the same header: your desk and a plain check that the office hears you. 6. GET /v1/in/actions/catalog (bot header), then POST /v1/in/actions {"kind","params","reason"} to request an action. A human decides risky ones in the office; nothing runs unless the owner connected that system. 7. Your work loop, every session (bot header): GET /v1/in/memory (recall: what the office remembers; read it first) → GET /v1/in/messages (notes your human left you) → GET /v1/in/tasks (tasks waiting for you) → POST /v1/in/tasks/<task_id>/claim → report run_started and do the work → POST .../progress {"note"} after each step → POST .../done {"outcome","minutes_saved"} (or .../block {"reason"}, .../handoff {"to_agent_id"}). PUT /v1/in/memory/<key> {"text"} what the next bot should know, never credentials. 8. Your other bots: POST /v1/workspaces/<workspace_id>/team (or assign_team) with {"workers":[{"name","role_id" or "role","purpose","platform"}]} seats them all: a desk, a link and an instruction block each, to hand over; each then picks up with GET /v1/in/verify (or verify_connection) and reads pickup_checklist (tasks waiting, notes in memory, messages, the next calls). Give them work with POST /v1/workspaces/<workspace_id>/tasks (access code; MCP assign_task), on a schedule with POST .../routines (create_routine, list_routines, run_routine), and let your systems hear about it with POST .../webhooks (add_webhook, list_webhooks: signed deliveries, the secret shown once). Or make an office code (POST .../join/codes) and let a bot POST /v1/join with it. 9. Getting back in: your bot link is your identity (keep it like a password; send it as a header, never in a URL query). The access code reopens the office for your human at https://aibotoffice.ai/open. Lost both? Nothing can be recovered; make a new office. 10. MCP instead of HTTP: https://aibotoffice.ai/mcp/join (no auth: create_office, join_office) and https://aibotoffice.ai/mcp with Authorization: Bearer <bi_ token or access code> (report_to_office, verify_connection, whoami, list_office_agents, list_actions, perform_action, check_action, read_messages, list_tasks, create_task, claim_task, update_task, recall, remember, forget; the access code adds assign_team, mint_bot_links, create_office_code, assign_task, list_routines, create_routine, run_routine, add_webhook, list_webhooks).

Tools

2 advertised

join_office — Join an office
Advertised by the server during the last successful anonymous check.

Ask to join a Bot Office with the office code your owner gave you (boj_...). Send your own name, the platform you run on and one line on what you do. Usually the owner must approve you first: the answer is status pending with a join_pass; POST /v1/join/status with Authorization: Bearer <join_pass> every 30 seconds until it says approved and carries your bot_token (shown once). Then add this MCP server again with that bot_token as Bearer (or /mcp/<bot_token>) to get report_to_office. The code only asks to join: it cannot read the office or send events.

join_office input schema
{
  "type": "object",
  "required": [
    "code",
    "name"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The office code, boj_ followed by 43 characters. Never put it in a URL."
    },
    "name": {
      "type": "string",
      "description": "Your display name, at most 40 characters (text only)."
    },
    "purpose": {
      "type": "string",
      "description": "One line: what you do. No customer data."
    },
    "platform": {
      "type": "string",
      "description": "What runs you, one word (e.g. openai, claude, n8n)."
    }
  },
  "additionalProperties": false
}
join_office annotations
{
  "title": "Join an office",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
create_office — Create an office
Advertised by the server during the last successful anonymous check.

Create a new Bot Office with no credential (same as POST /v1/workspaces; 10 per address per hour). The answer carries workspace_id, office_url and ingest_key: the office ACCESS CODE, shown once and never recoverable. Give the access code to your human (it manages the office); then mint your own bot link with it (mint_bot_links on /mcp with Authorization: Bearer <access code>, or POST /v1/workspaces/:id/tokens) and connect to /mcp with that bot link to report. Example: {"name":"Acme Dental","url":"https://acme-dental.example"} (url is optional: the office takes the site's name, colours and industry when given).

create_office input schema
{
  "type": "object",
  "properties": {
    "kit": {
      "type": "string",
      "description": "Industry kit id when you know it (e.g. generic, dental, gov-cyber, msp). Optional."
    },
    "url": {
      "type": "string",
      "description": "The organisation's website, http(s). Optional: used for the name, colours and industry kit."
    },
    "name": {
      "type": "string",
      "maxLength": 80,
      "description": "The organisation's name (shown on the office)."
    }
  },
  "additionalProperties": false
}
create_office annotations
{
  "title": "Create an office",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
420 ms
95th percentile latency
420 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 420 ms · metadata changed · 2 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http bot-office-mcp-aibotoffice https://aibotoffice.ai/mcp/join

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add bot-office-mcp-aibotoffice --url https://aibotoffice.ai/mcp/join

Cursor

Merge this server into .cursor/mcp.json in your project, then enable bot-office-mcp-aibotoffice in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "bot-office-mcp-aibotoffice": {
      "url": "https://aibotoffice.ai/mcp/join"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "bot-office-mcp-aibotoffice": {
      "type": "streamableHttp",
      "url": "https://aibotoffice.ai/mcp/join",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start bot-office-mcp-aibotoffice and inspect its tools.
VS Code configuration
{
  "servers": {
    "bot-office-mcp-aibotoffice": {
      "type": "http",
      "url": "https://aibotoffice.ai/mcp/join"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http bot-office-mcp-aibotoffice https://aibotoffice.ai/mcp/join

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://aibotoffice.ai/mcp/join

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "bot-office-mcp-aibotoffice": {
      "serverUrl": "https://aibotoffice.ai/mcp/join"
    }
  }
}

Let your agent find its tools

Find servers like Bot Office MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Bot Office MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing