- The door, at
https://<your-worker>.workers.dev/mcp. It has 14 built-in tools, up to 20 tools you define, four playbook prompts and six widgets. Your agent uses this one every day. - The admin connection, at
https://<your-worker>.workers.dev/mcp/admin. It takes the admin token only. You mount it briefly to manage feeds and custom tools. See Custom tools.
Next: line that suggests what to call next, computed from the data. A failure reads Error (code): message and includes a hint for fixing it.
None of the door tools writes to Ed, Moodle, Canvas or Gmail. The tools marked Writes unicorn state change only briefs, plans, labels or corrections inside your deployment.
Door tools
get_briefs
List briefs, which are the notes unicorn and your playbooks leave in your inbox. Call it at the start of a session. Shows the briefs widget.boolean
default:"true"
Set to
false to include briefs you have already read.integer
default:"20"
How many to return, from 1 to 100.
ack_briefs
Mark briefs as read soget_briefs stops returning them by default. It never deletes anything. Writes unicorn state.
string[]
required
Brief ids from
get_briefs. Between 1 and 100.write_brief
File a finished playbook result as a brief. A repeat call with the same key does nothing, so a retried call never makes a duplicate. Writes unicorn state.string
required
A short label in lowercase words joined by hyphens, up to 40 characters, such as
weekly-plan.string
required
What the brief is about, such as an ISO week or a unit code. Up to 200 characters.
string
required
Up to 200 characters.
string
required
Markdown, up to 20,000 characters.
string
required
A value that stays the same across retries of one run, such as the ISO week. Up to 200 characters.
changes_since
Page through what changed after a position. Shows the changes widget.string
The
nextCursor from a previous call, digits only. Leave it out to get the latest 20 changes.integer
default:"100"
From 1 to 500.
string
A unit code, to see only that course’s changes.
string[]
Only these change types. The older type names also work.
events, nextCursor, hasMore and counts per type. Read-only.
course
Get one course from every source, grouped into assignment buckets with due dates, submission state and staff answers, plus general notices. Shows the course widget.string
required
A unit code, up to 20 characters.
unlabeled items. When more than one offering matches, it returns ambiguous with every match instead of guessing. Read-only.
life
Get items that are not tied to a course, grouped intolife/events, life/admin and life/other, plus anything not yet labeled. Takes no inputs. Read-only.
search_items
Search item titles and text across every source. Shows the deadlines widget.string
required
Up to 200 characters.
string
One kind of item, such as
assessment or thread.string
A unit code.
string
An ISO timestamp. Only items at or after it.
integer
default:"20"
From 1 to 100.
upcoming
List items with a deadline in the next days, across every course, ordered by due date. Shows the deadlines widget.integer
default:"14"
From 1 to 180.
string
A unit code.
boolean
default:"false"
Also return missed deadlines from the last 90 days.
get_plan
Read a saved plan. A plan that does not exist yet comes back as empty, not as an error. Shows the plan widget.string
required
weekly or assignment.string
required
For
weekly, an ISO week such as 2026-W39. For assignment, the item as <source>:<itemId>, exactly as upcoming or search_items returned it. Up to 200 characters.save_plan
Save a plan, replacing the whole content. Read the plan first to edit rather than replace. Shows the plan widget. Writes unicorn state.string
required
weekly or assignment.string
required
As in
get_plan.string
required
Markdown, up to 20,000 characters. Use
- [ ] for open tasks.remember
Save a standing correction exactly as you wrote it. Only durable rules belong here. Playbooks read corrections back when they run. Writes unicorn state.string
required
Up to 500 characters.
saved, duplicate or empty. When the notes are full, the oldest is dropped to make room.
label_items
File items into buckets. Use it for items thatcourse or life returned as unlabeled. Leave out anything ambiguous instead of guessing. Writes unicorn state.
object[]
required
Between 1 and 200. Each has
source, itemId, bucket, and an optional topic of up to 40 characters.string
default:"client"
client or triage. Records who filed the item.status
Report each source’s last sync and error, whether the scheduler is running, the latest change position and your timezone. Use it to explain stale or missing data. Shows the connections widget. Takes no inputs. Read-only.run_playbook
Fetch a playbook’s steps and the data it needs, already gathered, plus your saved corrections. Your agent then follows the steps. unicorn takes no further action. See Playbooks.string
required
weekly-plan, decompose-assignment, forum-brief or triage.Your own tools
Tools you define appear on the door beside these, up to 20. See Custom tools.Prompts
The door also offers four prompts with the playbook names. Clients that support prompts list them. Clients that do not, such as ChatGPT, userun_playbook.
Admin tools
These are on the admin connection only.Change types
Each change event has one of these types.
Older history may carry the earlier names
item.created, item.updated and capability.changed. They are kept as they were and still work as filters.
Buckets
Every item is filed in one of five kinds of bucket.
An assessment owns its bucket, and a forum thread joins an assignment when its category matches the assessment’s title. Both are decided as unicorn reads them, with no AI model. Free text is filed by the triage playbook, or by your agent on the spot. An item that cannot be placed is returned marked
unlabeled. unicorn never guesses a course.