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.

OTP

NPM · OTP-MCP-SERVER · 3 COMPONENTS

Put AI agents on your org chart: seats, KPIs, to-dos, meetings and logged work, next to the people.

62 Trust /100

Last scanned (11 hours ago)

Scores higher than 31% of npm servers

Category Project Management

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
Schema Quality & AI Usability68
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 8900 tokens (~134/item across 66 items; 66 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 Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "publish_oos" implies "publish" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 66 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

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

What we tested

Checks we ran (14)

  • Malware scan
  • Known CVEs
  • Install scripts
  • Dependency health
  • Source repository
  • Provenance
  • License
  • Maintenance
  • Schema quality
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Checks we could not complete (2)

These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.

  • Security disclosure in Provenance & TransparencySecurity-disclosure policy not yet verified: we couldn't inspect the source repository.
  • Stability in Stability & Change Management (scores 0 for this)Stability not yet verified: not enough scan history yet (needs a 30-day window).

Does not apply to this package (2)

  • Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
  • Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.

The score does not measure everything. What the score does not measure →

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.

  • 31 Oct 26 +15
    • Malware scan: unverified → pass ▲ security
  • 30 Oct 26 47

    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 · Analysed npm/otp-mcp-server@0.5.3

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 66 exposed · ~8,900 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_issue ~350

Raise an issue on this organization's own issues list, where it lands on the issues board and on the Issues section of that team's Delta Meeting. Use this when someone wants something on the agenda: a problem to work through, a decision to make, a topic to raise. Pass team_id to put it in front of a specific team's meeting -- get it from list_meetings, which returns each meeting's teamId; omit it and the issue is org-wide and unassigned, which is a real state, not a failure. This is the org's OWN issue list. To report a bug or request a feature FROM the OTP vendor, use submit_ticket instead -- the two look similar and go to completely different places.

NameTypeReqDescription
categorystring–Default 'other', which is what an agenda item usually is
descriptionstring–Detail, if the person gave any. Do NOT invent one: leave it out and the issue records where it came from instead.
horizonstring–'short' (default) is worked day to day; 'long' parks it for the quarterly.
owner_entity_typestring––
owner_external_idstring–Seat that owns the issue, e.g. 'HUM_DAVIDSTEEL' or 'AGT_RADAR'
owner_namestring––
prioritystring–Default medium
team_id––Team whose meeting should show this issue, from list_meetings' teamId. Omit or pass null for an org-wide issue on no team.
titlestringyesThe issue as the person said it, e.g. 'Feedback for customers wanting to cancel'

No output schema declared.

No examples provided.

add_rock ~167

Create a quarterly rock: the 90-day priority a seat commits to. Requires owner, title, quarter, and due date.

NameTypeReqDescription
descriptionstring––
due_datestringyesISO 8601 datetime, e.g. '2026-06-30T23:59:59Z'
on_trackboolean–Defaults to true at creation
owner_entity_typestringyesWho owns this rock
owner_external_idstringyesOwner identifier (e.g. 'dsteel', 'dirk')
owner_namestring–Display name for the owner
quarterstringyese.g. '2026-Q2'
status_notestring–Initial status note
titlestringyes–

No output schema declared.

No examples provided.

add_todo ~393

Create a to-do (typically a 7-day commitment from a Delta Meeting). Put it on the person who will do it: pass their name as owner_name and OTP finds them (or owner_external_id from list_people). Never write a person's name into the title, e.g. "[Owen Cartier] ..."; the owner is a field, and a to-do filed under the wrong person lands on the wrong person's list. To share one to-do between several people, pass also_assign. Pass `repeat` to make it a repeating to-do: daily, weekly, monthly, yearly or a custom cadence, advancing when each copy is done or on a fixed schedule, with an optional end. The response's todo is the first copy.

NameTypeReqDescription
also_assignarray–More people who share this one to-do, by name. Each ticks off their own part.
descriptionstring––
due_atstring–ISO 8601 datetime; defaults to 7 days from now if omitted
meeting_idstring–Meeting in which this to-do was created
owner_entity_typestring–Worked out from the owner; only needed with an id OTP does not know.
owner_external_idstring–The owner's id from list_people. Only needed when two people share a name.
owner_namestring–Who owns it, by name ("Owen Cartier", or a first name only one person has). Enough on its own.
repeatobject–Make this a repeating to-do. Omit for a one-off.
teamstring–The team it belongs to, by name or id (list_people lists teams). Defaults to the meeting's team when meeting_id is given. A to-do with a team shows on that team's view.
titlestringyesWhat needs to happen. No owner name in brackets.

No output schema declared.

No examples provided.

answer_coaching_question ~155

Record the person's own answer about their own seat: yes, partly, or no, plus anything they said in their own words. 'partly' is a real answer and usually the most useful one -- do not round it to yes or no. Only ever call this with what they actually said; never infer an answer from tone or from what they said about something else.

NameTypeReqDescription
check_keystringyesFrom my_coaching_questions
check_versionintegeryesFrom my_coaching_questions
notestring–Their own words, verbatim where possible
responsestringyes–
seat_external_idstringyesThe seat the question is about; must be one the caller holds

No output schema declared.

No examples provided.

approve_coaching_action ~80

Approve one suggested action and carry it out -- creating the to-do, issue, measurable or meeting exactly as it was shown. The approving seat is taken from the caller's own session, never from arguments. Only ever call this after the person has seen the proposal and said yes.

NameTypeReqDescription
intervention_idstringyesThe intervention the person approved

No output schema declared.

No examples provided.

browse_oos ~144

Browse published Organizational Operating Systems on OTP. Filter by industry, org size, template type, or quality tier. Returns a list of published OOS files with org metadata.

NameTypeReqDescription
industrystring–Filter by industry (e.g. 'digital_marketing', 'saas', 'healthcare')
limitnumber–Results per page (default 20, max 100)
pagenumber–Page number (default 1)
sizestring–Filter by organization size
sortstring–Sort order: newest (default), claims count, or quality tier
templatestring–Filter by OOS template type

No output schema declared.

No examples provided.

capture_learning ~237

Capture an operational learning when an agent fails or you discover a better approach. This is the core OTP feedback loop: agent fails → you correct → correction becomes coordination intelligence → all agents improve. The learning is saved as a claim in your draft OOS and will be available via get_my_rules.

NameTypeReqDescription
agentstring–Which agent failed. E.g. 'Dash', 'Pepper', 'Dirk'
sectionstring–Which OOS section this belongs in (auto-detected if not specified)
source_urlstring–URL to a better approach, repo, or reference. E.g. 'https://github.com/user/better-meta-analysis'
what_failedstringyesWhat went wrong. E.g. 'Dash gave bad Meta Ads analysis -- used wrong date range and missed spend anomalies'
what_to_dostringyesThe rule/fix. E.g. 'Always validate date ranges against the campaign's actual active period before running spend analysis'
whystring–Why this matters. E.g. 'Without date validation, the analysis includes pre-launch zeros that skew averages down'

No output schema declared.

No examples provided.

claim_seat ~309

Take a seat that is ALREADY drawn on this organization's org chart. Use claim_seat when the humans drew your seat before you connected -- they will give you its exact id (e.g. 'AGT_RADAR') in the connection code or by name; use register_agent only when you have NO seat on the chart yet (it creates a new one, and would create a duplicate here). Pass external_id exactly as given. Optionally add, honestly from your own system prompt / CLAUDE.md: your role, what you own, what you explicitly do not own, and up to 3 KPIs. OTP binds this connection to that seat, so from then on OTP knows which agent is calling. Safe to retry: if this connection already holds the seat it just says so.

NameTypeReqDescription
doesNotOwnstring–What is explicitly NOT yours, so the chart has no overlap. E.g. 'Client comms, strategic decisions'
external_idstringyesThe chart seat to claim, exactly as the human gave it. E.g. 'AGT_RADAR'
kpisarray–Up to 3 KPIs you should be judged on. Omit rather than invent.
ownsstring–What you are accountable for. E.g. 'Weekly revenue forecast, pipeline coverage, spend pacing'
rolestring–One line on what you do. E.g. 'Reads the numbers and calls the trend before it lands'

No output schema declared.

No examples provided.

compare_oos ~79

Compare two published OOS files side-by-side. Returns claims unique to each, similar claims, and duplicates. Great for learning what other organizations do differently.

NameTypeReqDescription
oos_id_astringyesFirst OOS file ID (typically yours)
oos_id_bstringyesSecond OOS file ID (the one to compare against)

No output schema declared.

No examples provided.

complete_todo ~61

Mark a to-do as done (or undone if already complete). For a repeating to-do the response's `nextCopy` is the copy just created, if the series produced one.

NameTypeReqDescription
doneboolean––
todo_idstringyes–

No output schema declared.

No examples provided.

composio_docs ~122

Search Composio's official documentation (docs.composio.dev) for how a connection works: required scopes, authentication, available actions, limits, provider-specific setup. Use this instead of answering from memory when someone asks how to use or set up a connection. Every result carries the source URL -- cite it.

NameTypeReqDescription
limitnumber–How many doc pages to return (1-10, default 5)
qstringyesWhat to look up, e.g. 'slack scopes', 'connect google calendar', 'trigger webhooks'

No output schema declared.

No examples provided.

create_meeting ~130

Schedule a new Delta Meeting. Returns the meeting object including its ID and the URL of the running meeting page. Pass team_id to put it on a specific team, or team_id null for a personal meeting on no team; omit it and it lands on the organization's default team.

NameTypeReqDescription
attendeesarray––
meeting_typestring––
scheduled_atstringyesISO 8601 datetime
team_id––Team the meeting belongs to. Omit for the org's default team; pass null for a personal meeting on no team.
titlestringyes–

No output schema declared.

No examples provided.

create_schedule ~359

Schedule a process to run automatically on a recurring cadence -- hourly, daily, or weekly -- in a named timezone. This is real autonomy: once created and enabled, OTP runs the SOP on its own and the run spends the organization's wallet, with no human in the session. Call list_processes first and pass the exact agent_external_id and sop_title it returned. Cadence is limited to hourly/daily/weekly by design; there is no raw cron and no weekdays-only option, so say so plainly rather than approximating one. Requires a funded wallet and an active API key.

NameTypeReqDescription
agent_external_idstringyesThe seat that owns the process, exactly as list_processes returned it (e.g. 'AGT_RADAR')
cadencestringyesHow often it runs
hourinteger–Hour of day, 0-23, in the schedule's timezone. Required for daily and weekly; ignored for hourly. 10 means 10am.
minuteinteger–Minute of the hour, 0-59. Defaults to 0.
namestring–Label for the schedule. Defaults to the SOP title.
sop_idstring–SOP id when list_processes returned one; more precise than matching on title
sop_titlestringyesExact title of the SOP to run, as list_processes returned it
timezonestring–IANA timezone the hour is read in, e.g. 'America/New_York'. Defaults to America/New_York. Ask rather than assume when the user's timezone is not already known.
weekdayinteger–Day of week for weekly, 0=Sunday through 6=Saturday. Defaults to Monday.

No output schema declared.

No examples provided.

decline_coaching_action ~82

Decline a suggested action, with the reason in the person's own words. Declining the suggestion is not the same as dismissing the observation -- the underlying finding stays, and Ollie may offer a different way in.

NameTypeReqDescription
intervention_idstringyes–
reasonstringyesWhy, in their words. A refusal with no reason teaches nothing.

No output schema declared.

No examples provided.

delete_schedule ~66

Delete a schedule permanently. Prefer update_schedule with enabled=false when the intent is 'stop it for now' -- a pause is reversible in one click and a delete is not. Get the schedule id from list_processes.

NameTypeReqDescription
schedule_idstringyesSchedule id from list_processes

No output schema declared.

No examples provided.

discover_intelligence ~62

Run the OTP Scout to discover relevant coordination intelligence from other organizations. Analyzes gaps in your OOS and finds high-quality claims you might want to adopt. Requires API key.

NameTypeReqDescription
limitnumber–Maximum number of recommendations to discover (default 20)

No output schema declared.

No examples provided.

end_meeting ~30

End a Delta Meeting. Marks status complete and stamps endedAt.

NameTypeReqDescription
meeting_idstringyes–

No output schema declared.

No examples provided.

export_rules_markdown ~92

Export your OTP rules (OOS claims + matched best practices) to a local markdown file that agents can read at startup. This bridges OTP intelligence into your local agent army. Requires API key.

NameTypeReqDescription
include_best_practicesboolean–Include matched best practices (default true)
output_pathstring–File path to write rules to (default: ~/.claude/otp-rules.md)

No output schema declared.

No examples provided.

get_best_practices ~169

Browse OTP's best practices library -- 1,500+ actionable rules from 9 publishers (Google, AWS, Deloitte, Accenture, etc.). Search by keyword, filter by category or publisher. Each practice is a prescriptive rule with why and failure mode. Requires API key.

NameTypeReqDescription
categorystring–Filter by category (e.g. 'Machine Learning', 'MLOps', 'AI Strategy', 'Prompt Engineering', 'AI Governance')
limitnumber–Results per page (default 50, max 200)
pagenumber–Page number (default 1)
publisherstring–Filter by publisher profile ID
qstring–Search query (e.g. 'prompt engineering', 'data governance', 'agent coordination')

No output schema declared.

No examples provided.

get_claims ~130

Get all claims from a specific OOS file. Each claim contains a rule, reasoning (why), failure mode, confidence level, and evidence type. Filter by section, confidence, or evidence type.

NameTypeReqDescription
confidencestring–Filter by confidence level
evidencestring–Filter by evidence type
oos_idstringyesThe OOS file ID to get claims from
sectionstring–Filter by section (e.g. 'core_operating_rules', 'failure_patterns', 'coordination_patterns', 'operational_heuristics', 'human_ai_boundary_conditions')

No output schema declared.

No examples provided.

get_inbox ~109

View your intelligence inbox -- recommendations discovered by the Scout. Filter by status (pending, accepted, rejected, adapted) or section. Requires API key.

NameTypeReqDescription
limitnumber–Results per page (default 20, max 100)
offsetnumber–Offset for pagination (default 0)
sectionstring–Filter by claim section (e.g. 'failure_patterns', 'coordination_patterns')
statusstring–Filter by recommendation status (default: pending)

No output schema declared.

No examples provided.

get_inbox_stats ~43

Get a summary of your intelligence inbox -- how many recommendations are pending, accepted, rejected, and adapted. Shows top sections and average relevance score. Requires API key.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_meeting_agenda ~156

Get one meeting's agenda: the meeting itself, the scorecard snapshot (with each KPI's latest value), the rocks snapshot, OPEN issues (status open or in_progress) and OPEN to-dos, trimmed to the fields an agenda needs, plus counts of the closed and done items left out. Issues and to-dos are the organization's, not filtered to the meeting's team. Pass include_closed=true to also get recently resolved issues and done to-dos. Use to prep, render or summarize a meeting.

NameTypeReqDescription
include_closedboolean–Also return resolved/closed issues and done to-dos (the 100 most recent of each). Default false: open items only.
meeting_idstringyes–

No output schema declared.

No examples provided.

get_meeting_transcript ~206

Read a meeting's transcript -- what was actually said in the room. Use this whenever someone asks about the CONTENT of a meeting: what was decided, who said what, what a number was, what someone committed to. get_meeting_agenda returns a meeting's structure; this returns its words. Long transcripts arrive one window at a time -- if next_offset comes back there is more, so keep reading before you answer. When has_transcript is false, say plainly that no transcript is attached rather than guessing at what was said. This tool is off unless the organization's Owner has enabled transcript reading; if it refuses, relay that plainly and say the Owner can turn it on in Settings, Redaction. Never imply the refusal is a bug or that you can work around it.

NameTypeReqDescription
meeting_idstringyes–
offsetinteger–Character offset to read from. Omit to start at the beginning; pass the next_offset from the previous call to continue.

No output schema declared.

No examples provided.

get_my_rules ~119

Get your organization's operational rules from OTP -- your published OOS claims PLUS matched best practices from the library. Returns rules in a format agents can directly use for coordination. This is the bridge between OTP and your agent army. Requires API key.

NameTypeReqDescription
include_best_practicesboolean–Include matched best practices alongside OOS claims (default true)
min_confidencestring–Minimum confidence level (default: all)
sectionstring–Filter by section (e.g. 'core_operating_rules', 'coordination_patterns')

No output schema declared.

No examples provided.

get_my_seat ~115

Who YOU are on this organization's chart: your seat id, name, and role, who you escalate to, your immediate colleagues (peers under the same manager, names and types only), and the KPIs you are measured on. Resolved from this connection's bound identity, never from arguments, so it always answers about the agent calling. If it says this key is not bound to a seat, you are on an org-wide connection: call register_agent to take a seat, then this same connection is your identity.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_network_learnings ~83

See what other organizations on the OTP network have learned recently. Shows operational corrections and coordination discoveries from other agent teams. This is how your agents learn from the entire network, not just your own experience.

NameTypeReqDescription
agentstring–Filter by agent name to see learnings relevant to a specific agent
limitnumber–Max results (default 20)

No output schema declared.

No examples provided.

get_oos ~39

Get a specific published OOS file by its ID, including organization metadata and file details.

NameTypeReqDescription
idstringyesThe OOS file ID

No output schema declared.

No examples provided.

get_operating_plan ~62

Read the organization's active Operating Plan (the workspace at /dashboard/oos-operating-plan): the plan, its eight strategy sections with their content, and the current quarter's execution items. Use this before update_operating_plan_section to see what is already there.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_org ~43

Get a specific organization's public profile on OTP, including their published OOS files, quality tier, badge, and stats.

NameTypeReqDescription
org_idstringyesThe organization ID

No output schema declared.

No examples provided.

get_patterns ~65

Discover coordination patterns that appear across multiple organizations. Shows which agent configurations, authority structures, and workflow patterns are most common.

NameTypeReqDescription
industrystring–Filter patterns by industry
min_orgsnumber–Minimum number of organizations a pattern must appear in (default 2)

No output schema declared.

No examples provided.

get_publishers ~87

Browse organizations that have published OOS files on OTP. See their quality tier, badge, industry, claim count, and publication history.

NameTypeReqDescription
industrystring–Filter by industry
limitnumber–Results per page
min_qualitystring–Minimum quality tier
pagenumber–Page number
templatestring–Filter by template type

No output schema declared.

No examples provided.

get_sections ~48

List all claim sections available on OTP with counts. Sections include: core_operating_rules, agent_roles_and_authority, coordination_patterns, operational_heuristics, failure_patterns, human_ai_boundary_conditions.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_change_requests ~103

See the changes you asked someone else to approve. When you try to change a to-do, number, priority, project or issue that belongs to a seat your person does not hold, OTP does not apply it: it sends the owner a request and the change waits. This lists those requests with their status: pending, applied (approved and done), declined, failed (approved but could not be applied) or expired (7 days, no answer). Requires API key.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_connections ~106

List the outside systems this organization has connected (Slack, Gmail, Linear, spreadsheets and so on) with the live state of each: active, still authorizing, failed, or disconnected. Each entry carries a plain explanation of what went wrong when something is not working. Use this whenever someone asks what is connected, why a connection is not working, or what you can currently reach. This is the source of truth about connections -- do not infer them from which tools you happen to have.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_meetings ~208

List Delta Meetings for the authenticated organization, newest first, as summary rows: id, title, when, type, status, team, and whether a transcript and a summary exist. Filter by meeting_type or status; with neither, every type is returned. To find the NEXT meeting, pass upcoming=true: only meetings scheduled from now on, soonest first (newest-first plus a limit would otherwise show the furthest-out recurring instances and miss this week's). This tool deliberately does NOT return transcripts or notes -- call get_meeting_transcript or get_meeting_agenda with an id from here for the contents of one meeting.

NameTypeReqDescription
limitinteger–How many meetings to return. Defaults to 25.
meeting_typestring–e.g. 'leadership', 'departmental', '1on1'
statusstring––
upcomingboolean–Only meetings scheduled from now on, soonest first. Use this to find the next meeting.

No output schema declared.

No examples provided.

list_my_kpis ~199

List KPIs (scorecard measurables) on the org chart, filterable by owner, each with its goal and its latest recorded value, the period that value is for, and whether it meets the goal. Use this to see what an agent or human is being measured against, which KPIs are off goal, and to find a KPI's id or exact title before pushing a value with update_kpi. latest_value is null when nothing was recorded recently; meets_goal is null when there is no value or no goal.

NameTypeReqDescription
include_valuesboolean–Attach latest_value, latest_period_start and meets_goal. Default true; pass false for the bare list.
owner_entity_typestring–Filter by entity type.
owner_external_idstring–Filter to one owner's KPIs. E.g. 'AGT_DIRK' for the Dirk agent, 'HUM_DAVIDSTEEL' for David.

No output schema declared.

No examples provided.

list_people ~56

Everyone in this organization a to-do can be assigned to (people and AI agents) and its teams, each with the identifier add_todo and update_todo take. Use it to put each action item on the person who owns it.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_processes ~125

List this organization's processes (SOPs written on agent seats) together with any schedules already attached to them. Use this BEFORE creating, changing, or running a schedule: it is the only place the real agent externalId and SOP title come from, and both are required by the other process tools. The response also tells you whether autonomous runs are currently armed for the deployment (schedulerArmed) and whether this org is allowed to schedule at all (gate). Never guess an externalId or a SOP title; if this returns nothing, the org has no processes to schedule yet.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_rocks ~163

List quarterly rocks for the authenticated organization. Filter by quarter (e.g. '2026-Q2') or owner_external_id. Each rock carries status: on_track, off_track, completed or archived. Read status, not the on_track flag: a completed rock can still carry on_track false from before it was finished. Archived rocks are left out unless include_archived is true.

NameTypeReqDescription
include_archivedboolean–Also return archived rocks. Default false.
on_trackboolean–Only open rocks that are on track (true) or off track (false); completed and archived rocks are excluded
owner_external_idstring–Filter to one owner
quarterstring–Quarter filter, e.g. '2026-Q2'

No output schema declared.

No examples provided.

list_tickets ~74

List tickets on the OTP platform. Filter by status (open, in_progress, resolved, closed) or category (bug, feature, question, other).

NameTypeReqDescription
categorystring–Filter by category
limitnumber–Results per page (max 100)
statusstring–Filter by status

No output schema declared.

No examples provided.

list_todos ~109

List 7-day to-dos (commitments made in a Delta Meeting). Filter by open=true to see only incomplete, by meeting_id, or by owner. A to-do that is a copy of a repeating series carries `repeat` with a plain-English `summary` and its `seriesId`.

NameTypeReqDescription
meeting_idstring–Only to-dos created in a specific meeting
openboolean–Only return incomplete to-dos
owner_external_idstring––

No output schema declared.

No examples provided.

list_whiteboards ~134

List the organization's whiteboards -- shared visual canvases where people sketch and arrange sticky notes together, sometimes alongside a meeting. Returns each board's id, title, status ('draft', 'active', or 'filed'), the meeting it is attached to if any, who created it, and when it last changed. Filter by status, or by meeting_id to find the board a specific meeting used. This is the index only; use read_whiteboard to see what is written on a board.

NameTypeReqDescription
meeting_idstring–Only boards attached to this meeting
statusstring–Only boards in this state

No output schema declared.

No examples provided.

log_work ~208

Report a piece of work you have COMPLETED, so it shows on your chart tile and in the organization's activity. One call per completed piece of work, after it is done -- never for work you only planned or started. summary says what you did, in one or two sentences. Requires this connection to hold a seat (register_agent first); if it refuses with SEAT_NOT_BOUND, register and try again. Do not log the same work twice, and do not invent cost_cents you cannot substantiate.

NameTypeReqDescription
categorystring–Optional bucket for the work, e.g. 'reporting', 'outreach', 'triage'
cost_centsinteger–What the work cost in cents (tokens/API spend), if you know it. Omit for 0; never estimate upward.
summarystringyesWhat you did, past tense, <= 500 chars. E.g. 'Triaged 14 inbound emails, drafted 3 replies for approval'

No output schema declared.

No examples provided.

my_coaching ~191

What needs attention for the person asking: observations OTP has computed about the seats they hold, each with the suggested next actions attached. Returns only their own seats -- never a colleague's, never a direct report's. Answers with what the evaluation engine actually wrote; if it has not run there is nothing to report and the tool says so rather than estimating. ALSO returns openQuestions: things only this person can tell OTP, which it cannot observe. When any are present, say which part of the picture is missing and ask ONE of them conversationally at the end of your answer -- never a list, never all of them, and never before you have answered what they actually asked. Record the reply with answer_coaching_question.

NameTypeReqDescription
questionstring–The person's question in their own words, e.g. 'what should I fix first?'. Steers what to lead with; never changes what exists.

No output schema declared.

No examples provided.

my_coaching_questions ~101

The handful of questions only this person can answer about their own seat -- whether they are clear on what they own, whether they could describe where the organization is going, whether the recurring work is done the same way everyone else does it. OTP cannot observe any of that, so it asks. Returns only unanswered questions for the current period, and only for seats the caller holds. Ask these conversationally, one at a time, and never all at once.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

my_dashboard ~52

Get your organization's OTP publisher dashboard. Shows published files, total claims, quality tier, connected orgs, and recent activity. Requires API key.

NameTypeReqDescription
oos_idstringyesYour latest OOS file ID

No output schema declared.

No examples provided.

publish_oos ~77

Publish an Organizational Operating System file to OTP. Requires an API key. The OOS content should be in the standard OOS markdown format with YAML frontmatter and structured claims.

NameTypeReqDescription
raw_contentstringyesThe full OOS file content in markdown format with YAML frontmatter
templatestringyesThe OOS template type

No output schema declared.

No examples provided.

read_whiteboard ~161

Read what is currently written on a whiteboard: the text of its sticky notes and shapes, grouped by frame, as a plain-text outline. This is the CURRENT contents of a live collaborative canvas that people may still be editing -- not a finished document, and not a history of what the board used to say. Only text comes through: drawings, arrows, and images have nothing to extract, so a busy-looking board can honestly come back sparse. When note_count is 0, say the board has no readable text rather than guessing at what is drawn on it. Find a board's id with list_whiteboards. Very large boards are cut off; `truncated` tells you when.

NameTypeReqDescription
whiteboard_idstringyesFrom list_whiteboards

No output schema declared.

No examples provided.

register_agent ~392

Put YOURSELF on this organization's OTP org chart. Call this once, when a human gives you an OTP connection code and asks you to connect. Read your own system prompt / CLAUDE.md and describe yourself honestly: your name, your role, what you own, what you explicitly do not own, and up to 3 KPIs you should be measured on. OTP creates your seat, seeds your KPIs, and binds this connection to you, so from then on OTP knows which agent is calling. If the humans ALREADY drew your seat on the chart and gave you its id, call claim_seat with that id instead -- register_agent would create a duplicate. Safe to retry: if you are already registered it just tells you who you are. Do not invent a KPI you have no way to move.

NameTypeReqDescription
doesNotOwnstring–What is explicitly NOT yours, so the chart has no overlap. E.g. 'Client comms, strategic decisions'
kpisarray–Up to 3 KPIs you should be judged on. Omit rather than invent.
namestringyesWhat you are called. E.g. 'Forecaster', 'Dash'
ownsstring–What you are accountable for. E.g. 'Weekly revenue forecast, pipeline coverage, spend pacing'
reportsTostring–The chart seat you report to (e.g. 'HUM_NATEFOSS'). Use it ONLY if the human's connection code gave you one; otherwise leave it out and OTP reports you to whoever enrolled you.
rolestring–One line on what you do. E.g. 'Reads the numbers and calls the trend before it lands'
systemPromptstring–Your full system prompt / CLAUDE.md, verbatim, if you can read it. Stored as your brain so you survive being rebuilt elsewhere.

No output schema declared.

No examples provided.

Install

How do I install the OTP MCP server?

OTP runs locally as an npm package, launched with npx -y otp-mcp-server. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · otp-mcp-server

# add to Claude Code
claude mcp add david-steel-otp -- npx -y otp-mcp-server
Common questions

What is the OTP MCP server?

OTP is an MCP server listed in the public MCP registry as io.github.david-steel/otp. Put AI agents on your org chart: seats, KPIs, to-dos, meetings and logged work, next to the people. This page covers its npm package (otp-mcp-server).

Is the OTP MCP server safe to use?

OTP scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. 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 OTP MCP server expose?

OTP exposes 66 tools: register_agent, claim_seat, get_my_seat, log_work, browse_oos, and 61 more. Their descriptions and schemas cost roughly 8,900 tokens of context every time the server is loaded.

Is the OTP MCP server still maintained?

OTP 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.

What licence is the OTP MCP server under?

OTP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

What did VerifyMCP test on the OTP MCP server?

VerifyMCP ran 14 checks on OTP, covering Malware scan, Known CVEs, Install scripts, Dependency health and 10 more. 2 items could not be completed, a gap on our side rather than a finding about OTP: Security disclosure and Stability. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to an npm package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.