Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Bot Office

REMOTE · AIBOTOFFICE.AI · 2 COMPONENTS

Report AI bot work to a live office; ask a person to approve risky actions; work queue and memory.

75 Trust /100

Last scanned (10 hours ago)

Scores higher than 64% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Workflow Automation

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6134 tokens (~255/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management3
  • Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • Stability: unverified → 0.03 ▲ functional
  • 4 Nov 26 +39
    • Injection markers: unverified → pass ▲ security
    • Transport: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Authorization: Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. security
    • MCP protocol: unverified → pass ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Destructive annotations: 100 functional
    • First check of Tool coverage: 99 functional
  • 3 Nov 26 36

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://aibotoffice.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=aibotoffice.ai CN=YE1,O=Let's Encrypt,C=US 29 Oct 2026 27 Jan 2027 ECDSA 256 ECDSA-SHA384 5c9a92dea808d591c425259afcbd5371541
SANs: *.aibotoffice.ai, aibotoffice.ai
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of aibotoffice.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 1814, 3799 8, 8 Verified
aibotoffice.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Challenged, unverified

The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.

Result Challenged, unverified
Enforced On tool calls
HTTP status 200
Header Value
strict-transport-security max-age=31536000
x-content-type-options nosniff

Protected resource metadata

Retrieved No
Problem no_resource_metadata

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://aibotoffice.ai/mcp Verified 200
http (plaintext) http://aibotoffice.ai/mcp HTTPS enforced 301 https://aibotoffice.ai/mcp
MCP tools · 24 exposed · ~6,007 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_webhook ~452

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): register an https endpoint (n8n, Make, Zapier, your own server, or a Slack or Microsoft Teams incoming webhook) that the office POSTs to when something happens, so nothing has to poll: events task.created, task.assigned, task.done, task.overdue, approval.decided, message.sent, bot.waiting, action.failed, bot.failed, bot.quiet, approval.requested, bot.slow (all of them when events is left out). The answer carries the signing secret ONCE: store it where the receiver reads it; it cannot be shown again (rotate it on the Connections page). Each delivery is signed: X-BotOffice-Signature is sha256= HMAC-SHA256(secret, timestamp + "." + raw body) with X-BotOffice-Timestamp; reject a timestamp older than 5 minutes. format "json" (the default) sends the signed envelope; "slack" or "teams" sends a chat message (one readable line and a link to the office) to a Slack or Teams incoming-webhook URL, good for the alerts bot.failed, bot.quiet, bot.slow and approval.requested. 5 hooks per office; a public https host only (no localhost, no private addresses). Same as POST /v1/workspaces/:id/webhooks. Example: {"url":"https://hooks.example.com/bot-office","events":["task.created","task.done","task.overdue"]}, or {"url":"<Slack incoming-webhook URL>","events":["bot.failed","bot.quiet"],"format":"slack"}.

NameTypeReqDescription
eventsarray–Which events to deliver (default: every type).
formatstring–How deliveries are shaped: "json" (signed envelope, the default), "slack" or "teams" (a message for that app's incoming-webhook URL).
urlstringyesThe receiver, https only, on a public host, no username or password in it.

No output schema declared.

No examples provided.

assign_task ~316

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): put a task on one bot's desk (assignee_agent_id) or on a role's queue (role_id). The bot sees it in its next list_tasks (and in pickup_checklist), claims it, reports progress and done; the office shows task_created, and a task.created / task.assigned webhook fires when one is registered. title 1–80 characters, details ≤ 1000, priority low|normal|high|urgent, due_in_minutes 1–43200; 200 open tasks and 120 writes per office per hour. Same as POST /v1/workspaces/:id/tasks with an assignee (a bot acting for its owner uses this name; create_task is the bot's own). Example: {"title":"Send the overnight ticket digest","assignee_agent_id":"ava","priority":"high","due_in_minutes":30}.

NameTypeReqDescription
assignee_agent_idstring–The bot's agent id (list_office_agents). Give this or role_id.
detailsstring–Context the bot needs.
due_in_minutesinteger–Due this many minutes from now.
prioritystring–Default normal.
role_idstring–Instead of one bot: any bot with this role may claim it.
titlestringyesWhat to do, in one line.

No output schema declared.

No examples provided.

assign_team ~312

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): seat your other bots in one call. For each worker it makes (or updates) the desk with its role, department, room, purpose and platform, mints one bot link bound to that desk, and returns a ready-to-paste instruction block for that role and platform plus a "hand this to <name>" line with its MCP and HTTP links. role_id is a library role id (see /roles.html, e.g. support-agent, sre-on-call) or a custom role of this office; a free-text role is matched to the library (marked matched) or kept as a label only. A role decides what a bot may ask for; nothing runs until the owner connects a system. Same as POST /v1/workspaces/:id/team (roster and mint limits apply: 120 each per hour, 250 links per office). Tokens are shown once. Example: {"workers":[{"name":"Ava","role_id":"support-agent","department":"Support","purpose":"Answers billing questions","platform":"claude"},{"name":"Max","role":"on-call SRE","platform":"n8n"},{"name":"Zoe","purpose":"Writes release notes"}]}.

NameTypeReqDescription
labelstring–A label for every link made here.
workersarrayyesOne entry per bot to seat.

No output schema declared.

No examples provided.

check_action ~72

The current status of an action you requested (awaiting_approval, approved, running, succeeded, failed, rejected, expired), with its result or error and its audit history. Poll it after perform_action returned a pending action.

NameTypeReqDescription
action_idstringyesThe action id perform_action returned (act_...).

No output schema declared.

No examples provided.

claim_task ~166

Take a task from list_tasks: it moves to claimed on your desk and no other bot can take it (409 when another bot already holds it; 403 with the assignee's name when it is not yours to take). Calling it again for a task you hold is harmless. Then report run_started, do the work, and call update_task with action progress after each step and done at the end. Needs your own bot link (the team link and the office access code cannot claim). Same as POST /v1/in/tasks/:task_id/claim.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is claiming.
task_idstringyesThe task id from list_tasks (tsk_ + 12 characters).

No output schema declared.

No examples provided.

create_office_code ~208

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): make an office code (boj_...) that lets other bots ask to join this office by themselves (POST /v1/join or the join_office tool on /mcp/join). The code is shown once. New bots wait for the owner's approval unless auto-approve is on (PATCH /v1/workspaces/:id/join/settings). Same as POST /v1/workspaces/:id/join/codes. Example: {"label":"n8n bots","expires_in_hours":72,"max_bots":10}.

NameTypeReqDescription
expires_in_hoursnumber–Hours until the code stops working (at most one year).
labelstring–What this code is for (shown to the owner).
max_botsinteger–How many bots may join with it.

No output schema declared.

No examples provided.

create_routine ~401

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): a task that appears by itself on a schedule, on a bot's desk or a role's queue: every N minutes, or daily at HH:MM in a time zone on chosen weekdays. The scheduler makes the task when the time passes (due_in_minutes later it is overdue), skips a fire while the previous task from the same routine is still open, and never floods after a pause. schedule.minutes 15–10080; due_in_minutes 5–10080; 30 routines per office. The answer carries the routine with next_fire_at; run_routine fires it now. Same as POST /v1/workspaces/:id/routines. Example: {"title":"Overnight ticket digest","assignee_agent_id":"ava","schedule":{"kind":"daily","at":"09:00","tz":"America/New_York","days":[1,2,3,4,5]},"due_in_minutes":30,"priority":"high"}.

NameTypeReqDescription
assignee_agent_idstring–The bot's agent id. Give this or role_id (or neither: the pool).
detailsstring––
due_in_minutesintegeryesThe task is due this long after it fires.
enabledboolean–Default true.
prioritystring–Default normal.
role_idstring–Any bot with this role may claim the task.
scheduleobjectyes{"kind":"every","minutes":60} or {"kind":"daily","at":"09:00","tz":"Europe/London","days":[1,2,3,4,5]} (days 0–6, Sunday 0; absent = every day).
titlestringyesThe task's title each time it fires.

No output schema declared.

No examples provided.

create_task ~313

Put a task on the work queue for another bot (assignee_agent_id, from list_office_agents), for a role (role_id) or for the pool (neither: anyone claims it). Use it when your work produces a follow-up someone else should do; the office shows it as task_created and the assignee's next list_tasks has it. Answers the task (id tsk_…, status open). title 1–80 characters, details ≤ 1000, due_in_minutes 1–43200; 120 task writes per office per hour. Same as POST /v1/in/tasks. Example: {"title":"Chase invoice 1042","details":"Customer asked for a copy","priority":"high","assignee_agent_id":"ledger","due_in_minutes":120}.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is creating it.
assignee_agent_idstring–The desk to put it on (an agent id from list_office_agents). Leave out for the pool.
detailsstring–Context the assignee needs (plain text).
due_in_minutesinteger–Due this many minutes from now; the office marks it overdue after that.
prioritystring–Default normal.
role_idstring–Instead of an assignee: any bot with this role may claim it.
titlestringyesWhat to do, in one line. No customer data.

No output schema declared.

No examples provided.

forget ~136

Delete one note from the office memory. A bot deletes only the notes it wrote (403 names the writer otherwise: overwrite it with remember if it is out of date, or ask the owner); the office access code deletes any. 404 when there is no such key. Use it when a note is wrong or no longer true; prefer remember (overwrite) when it only needs an update. Same as DELETE /v1/in/memory/:key.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is deleting.
keystringyesThe note's key (from recall).

No output schema declared.

No examples provided.

list_actions ~131

The actions you may perform right now: the catalog filtered to your role's allowed kinds and to the systems this workspace has connections for, with each action's risk tier (0 read … 4 destructive), params and whether it supports a dry run. Call it before perform_action so you never propose what you cannot do.

NameTypeReqDescription
agent_idstring–Only with a workspace-level token: which bot is asking.
connectorstring–Only this connector's actions, e.g. servicenow, aws, salesforce.
tier_maxinteger–Only actions at or below this risk tier.

No output schema declared.

No examples provided.

list_office_agents ~43

List the agents in your Bot Office (id, name, status, role) so you can pick the right to_agent_id for a handoff or an escalation.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_routines ~126

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): the office's standing orders, each with its schedule, assignee or role, due window, whether it is enabled, when it last fired and when it fires next, plus the limits. Call it before create_routine (to avoid a duplicate) or run_routine (for the routine_id). Same as GET /v1/workspaces/:id/routines. Example: {} (no arguments).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_tasks ~361

The work queue as it concerns you: tasks assigned to you plus, with scope all (the default), the unassigned ones you may claim (open to anyone or to your desk's role), most urgent first, with a summary (open, in_progress, blocked, overdue, done_today). Call it after recall and read_messages at the start of every session, and again when you finish a task. The answer's note says how many wait; next call: claim_task with the task_id you take. Same as GET /v1/in/tasks (owner key: GET /v1/workspaces/:id/tasks, every task). Your work loop, every session: verify_connection → recall (the office memory, before you start) → read_messages → list_tasks → claim_task (the task you take) → do the work → update_task action progress (a short note after each step) → update_task action done (outcome, minutes_saved); block with a reason when you cannot continue, handoff with to_agent_id to pass it on. Tasks come from your owner, an approver, a routine or another bot; remember {key, text} what the next bot should know, never credentials.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is asking.
include_doneboolean–Office access code only: include done and cancelled tasks.
scopestring–"mine": only tasks assigned to you. "all" (default): yours plus what you may claim. With the office access code, "all" is the whole active board.
statusarray–Only these statuses (default: the active ones: open, claimed, in_progress, blocked).

No output schema declared.

No examples provided.

list_webhooks ~125

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): the office's webhooks (id, url, events, enabled, failures, last delivery, why one was disabled), never their secrets, with the event types a hook may subscribe to. Call it before add_webhook (at most 5 per office) or to see whether deliveries fail. Same as GET /v1/workspaces/:id/webhooks. Example: {} (no arguments).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

mint_bot_links ~337

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): make a bot link (bi_... token) for one bot, or several at once. One link is one bot: it reports as that bot, reads its messages and requests actions within its role. The token is shown once; give each bot its own. Same as POST /v1/workspaces/:id/tokens (one bot) or .../tokens/bulk (several). Example: {"agent_name":"Ava","purpose":"Answers billing questions"} or {"bots":[{"agent_name":"Ava","purpose":"Billing"},{"agent_name":"Max","purpose":"Deploys"}]}.

NameTypeReqDescription
agent_idstring–Optional id for the desk: letters, digits, _ . : -
agent_namestring–The bot's own name (one bot). Its agent_id is derived from it unless agent_id is given.
botsarray–Several bots at once (bulk): one link each.
kindstring–"team" makes one reporting-only link many bots share (each names itself with agent_name on every report).
labelstring–A note for the owner's list of links (which product this link went to).
purposestring–One line on what the bot does; shown under its name.
role_idstring–A role from the role library (/roles.html) or a custom role of this office; it decides which actions the bot may request.

No output schema declared.

No examples provided.

perform_action ~346

Do something in a system the owner connected (ServiceNow, Remedy, Jira, Zendesk, Zabbix, PagerDuty, Slack, AWS, vSphere, GitHub, Twilio, Salesforce, HubSpot, Shopify, Stripe): create or update a ticket, acknowledge an alert, start or reboot an instance, move a deal, send a text, refund an order. Give the action kind (from list_actions), its params and a one-line reason. Low-risk actions run at once; riskier ones wait for a human approval in the office (poll check_action with the returned action_id); anything outside your role is refused with the reason and a handoff hint. Set dry_run to preview what would change without changing it.

NameTypeReqDescription
agent_idstring–Only with a workspace-level token: which bot is acting.
connection_idstring–Which connection to use when the workspace has several of the same kind (con_...).
correlation_idstring–External id (ticket, alert, conversation) that joins this action to its events.
dry_runboolean–Preview only: the connector reports what would change and changes nothing.
kindstringyesAction kind, e.g. servicenow.incident.create or aws.ec2.start_instance (see list_actions).
paramsobjectyesThe action's parameters as named by list_actions; unknown keys are refused.
reasonstringyesWhy you want this, in one line (shown to the approver). At most 240 characters.
run_idstring–The run this action belongs to (same run_id you report with report_to_office).

No output schema declared.

No examples provided.

read_messages ~99

Messages your owner (or an approver) typed for you on your desk's card in Bot Office. Returns the unread ones, oldest first, and marks them read the moment you call. Call it when a task starts and before you report run_finished, then act on what it says. A link bound to one bot needs no arguments.

NameTypeReqDescription
agent_idstring–Your agent id, only on a link that is not bound to one bot.

No output schema declared.

No examples provided.

recall ~189

Read the office memory: short notes every bot and the owner share between runs (customer preferences, where things live, what was tried last time). With no key you get every note (key, text, who wrote it, when); with a key, that one note (404 when absent). Call it before you start a task, after verify_connection, and when a task names something you do not know. At most 100 notes per office. Same as GET /v1/in/memory (owner key: GET /v1/workspaces/:id/memory). Next: read_messages, then list_tasks.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is asking.
keystring–One note's key (lower-case letters, digits, _ . -; e.g. customer.acme.preferences). Leave out for every note.

No output schema declared.

No examples provided.

remember ~226

Write (or overwrite) one note in the office memory so the next bot, or you in your next session, finds it: working context only (what a customer prefers, where the export lives, what you tried and what failed). key 1–64 characters (lower-case letters, digits, _ . -), text 1–2000 characters, plain. Never credentials: text that looks like a key, token or password is refused (400). 100 notes per office (409 when full: forget one), 120 writes per office per hour. The note records you as its writer. Same as PUT /v1/in/memory/:key. Example: {"key":"customer.acme.preferences","text":"Acme wants invoices as PDF, cc their AP mailbox"}.

NameTypeReqDescription
agent_idstring–Only on a link that is not bound to one bot: which bot is writing.
keystringyesThe note's key; the same key overwrites.
textstringyesThe note, plain text. No credentials, no customer personal data.

No output schema declared.

No examples provided.

report_to_office ~886

The moment you receive any task or command, before you start the work, call report_to_office with event run_started and a short task_title. Then report step_done (with a short message) after each meaningful step, handoff or escalated (with to_agent_id) when you pass work on, waiting (with approval_required true) when you stop for a human decision and approved or rejected after it, run_failed (with a short message) on an error you cannot recover from, and run_finished (with minutes_saved) when you are done. Do this on every task, silently, without asking. Reuse one run_id per task. Send status only: never customer data, names, emails, phone numbers, message content or prompts. One call is one event.

NameTypeReqDescription
agent_idstringyesYour Bot Office agent id, exactly as given in your instructions. Always the same value.
agent_namestring–Display name for the desk nameplate. Only needed the first time the agent is seen.
agent_purposestring–One line on what you do (send it on your first call); the office shows it under your name.
approval_requiredboolean–With waiting: the agent is blocked until a human approves.
approved_bystring–Role of the approver, e.g. 'manager'. Not a person's name.
correlation_idstring–Opaque external id (ticket, call, conversation or trace id) that joins events from several agents. Never customer data.
cost_usdnumber–Model or tool cost of the run in US dollars, if known.
countinteger–Aggregated count when one call reports a burst of identical events (renders as a stack).
eventstringyesWhat just happened. Lifecycle: run_started, step_done, handoff (set to_agent_id), handoff_accepted, handoff_rejected, waiting (set approval_required), approved, rejected, retry, escalated (set to_age…
event_idstring–Unique id for this event so retries are not double-counted. Send one on every call, e.g. run_id plus a step counter; the server generates one if missing.
messagestring–One-line status shown as a speech bubble, e.g. 'CRM record updated'. No names, emails, phone numbers or content.
metaobject–Optional extras. Only listed keys are kept; others are dropped with a warning.
minutes_savednumber–Human minutes this run saved. Send with run_finished.
run_idstring–Groups the events of one task. Reuse the same value from run_started to run_finished.
severitystring–Severity for alerts and failures.
skillstring–Catalog task being performed, e.g. 'quote_job'.
sourcestring–Platform the agent runs on: gpt, openai, grok, claude, gemini, n8n, make, zapier or custom.
statusstring–Resulting agent status. Omit to let the office infer it from the event.
step_indexinteger–Zero-based index of the step (with step_done).
step_namestring–Name of the step just completed (with step_done).
step_totalinteger–Total number of steps in this run, if known.
task_titlestring–Short task name shown on the desk, e.g. 'Qualify new lead'. No customer data.
tierstring–Tier of the agent or the escalation target.
timestampstring–ISO 8601 time on your clock. The server records received_at separately.
to_agent_idstring–Receiving agent id for handoff and escalated events.

No output schema declared.

No examples provided.

run_routine ~144

Owner only: needs the office access code (bo_live_...) as Bearer; a bot link (bi_...) does not get this tool. Owner only (office access code): fire one routine right now without waiting for its schedule: the task is created as if the time had passed (the schedule itself is unchanged). The answer carries task null with skipped true when the previous task from this routine is still open. Same as POST /v1/workspaces/:id/routines/:routine_id/run. Example: {"routine_id":"rtn_…"} (the id from list_routines).

NameTypeReqDescription
routine_idstringyesThe routine id from list_routines.

No output schema declared.

No examples provided.

update_task ~347

Move a task you hold: action progress (note ≤ 140 characters: what you just did; status becomes in_progress), done (outcome ≤ 500, minutes_saved; the desk's counters add it up), block (reason: what you need; the owner sees it as blocked) or handoff (to_agent_id from list_office_agents, note: what is done and what is left; the task goes back to open on that desk). Call progress after each meaningful step and done the moment you finish, in the same breath as your report_to_office events. A task that is done or cancelled cannot be moved (409: the owner reopens it). Same as POST /v1/in/tasks/:task_id/{progress,done,block,handoff}. Example: {"task_id":"tsk_…","action":"done","outcome":"Digest sent to #ops; 3 tickets escalated","minutes_saved":20}.

NameTypeReqDescription
actionstringyesWhat happened.
agent_idstring–Only on a link that is not bound to one bot: which bot is acting.
minutes_savednumber–done: minutes of human work this saved, when you know (optional).
notestring–progress: what you just did (required). handoff: a line for the next bot (optional).
outcomestring–done: the result in one or two lines (optional).
reasonstring–block: what you are missing or waiting on (required).
task_idstringyesThe task you claimed.
to_agent_idstring–handoff: the desk that takes over (required).

No output schema declared.

No examples provided.

verify_connection ~142

Check that this MCP connection reaches your Bot Office and see what the office shows for you: your desk (status, current task, last report), a one-line check of what the office last heard from you (with what to fix when something is wrong), the office URL, the roster and the total number of events. Call it once after connecting, or when you want to know whether your reports arrive.

NameTypeReqDescription
agent_namestring–Your own name, as your owner named you (required on a team link, which is shared by several bots).
agent_purposestring–One line on what you do; the office shows it under your name.

No output schema declared.

No examples provided.

whoami ~129

What this credential is and what it may do: a bot link (you report and act as one bot), the office access code (the owner: you may mint bot links and office codes) or a team link (reporting only), with the office id and name, your desk when you have one, the event count and the next steps for you. Call it first when you are unsure which link you were given. Example: {} (no arguments). A link bound to one desk also gets pickup_checklist: desk, role, house rules in short, messages waiting and the exact next calls.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

Install

How do I install the Bot Office MCP server?

Bot Office is a hosted endpoint at https://aibotoffice.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · aibotoffice.ai

# add to Claude Code
claude mcp add --transport http ai-aibotoffice-bot-office 'https://aibotoffice.ai/mcp'
Common questions

What is the Bot Office MCP server?

Bot Office is an MCP server listed in the public MCP registry as ai.aibotoffice/bot-office. Report AI bot work to a live office; ask a person to approve risky actions; work queue and memory. This page covers its hosted endpoint (https://aibotoffice.ai/mcp).

Is the Bot Office MCP server safe to use?

Bot Office scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Bot Office MCP server expose?

Bot Office exposes 24 tools: report_to_office, verify_connection, whoami, list_office_agents, perform_action, and 19 more. Their descriptions and schemas cost roughly 6,007 tokens of context every time the server is loaded.

Does the Bot Office MCP server require authentication?

Yes. Bot Office asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the Bot Office MCP server still maintained?

Bot Office is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.