MCP

Model Context Protocol

Every tool this instance serves, with its parameters and a playground to run it.

Endpoint: POST /mcp — calls carry Authorization: Bearer.

Not connected yet? Connect your agent → · Auth and protocol detail · What calls cost

Playground

Pick a tool, fill in parameters, and run it.

Raw JSON-RPC
7 creditsagent_ask

Ask this instance's agent a question in natural language and get a written answer. It has every tool you do and will use several to answer, so reach for it to delegate a whole task — for one fact call that tool directly, and for a question about content this instance already holds use chat_ask, which answers from the index without tool calls.

Draws 7 credits from your balance per call.

ParamTypeDescription
prompt *stringYour question or request
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"prompt":"prompt"},"name":"agent_ask"}}
15 creditsapps_build

Build a small app from a natural language description, save it, and return the app details with URL. Apps are one of: a tracker (a list you add entries to, optionally totalling a number), a checklist, or a counter.

Draws 15 credits from your balance per call.

ParamTypeDescription
prompt *stringDescription of the app to build (e.g. 'an expense tracker', 'a packing checklist', 'a water intake counter')
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"prompt":"prompt"},"name":"apps_build"}}
apps_create

Create a new app — a small, self-contained HTML tool hosted on Mu

ParamTypeDescription
name *stringApp name (e.g. Pomodoro Timer)
slug *stringURL-friendly ID (e.g. pomodoro-timer)
description *stringShort description of what the app does
tagsstringComma-separated tags (optional)
html *stringThe app's HTML content (can include inline CSS and JavaScript, max 256KB)
pricenumberCredits charged per use (0 = free, max 1000)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"description":"description","html":"html","name":"name","slug":"slug"},"name":"apps_create"}}
apps_edit

Edit an existing app you own — update its name, description, tags, icon, HTML code, or price

ParamTypeDescription
slug *stringThe app's URL slug (e.g. pomodoro-timer)
namestringNew app name
descriptionstringNew description
tagsstringNew comma-separated tags
htmlstringNew HTML content (max 256KB)
iconstringNew SVG icon
pricenumberCredits charged per use (0 = free, max 1000)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"slug":"slug"},"name":"apps_edit"}}
apps_fork

Fork an existing app — creates a copy under your account that you can modify independently

ParamTypeDescription
slug *stringSlug of the app to fork
new_slugstringSlug for the forked copy (optional, auto-generated if empty)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"slug":"slug"},"name":"apps_fork"}}
apps_read

Read details of a specific app by its slug

ParamTypeDescription
slug *stringThe app's URL slug (e.g. pomodoro-timer)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"slug":"slug"},"name":"apps_read"}}
7 creditsapps_run

Run JavaScript code in a sandboxed environment and return the result. Use for calculations, data processing, or any computation the user needs.

Draws 7 credits from your balance per call.

ParamTypeDescription
code *stringJavaScript code to execute. The code runs as a function body — use 'return' to output a value. Has access to mu.ai(), mu.web.fetch(), mu.db and mu.store for platform features.
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"code":"code"},"name":"apps_run"}}
apps_test

Test an app by checking its HTML structure and executing its mu.api calls server-side. Returns which API calls work and which fail.

ParamTypeDescription
slug *stringThe app's URL slug
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"slug":"slug"},"name":"apps_test"}}
block_user

Block a user — hides all their content from your view

ParamTypeDescription
user *stringUser ID to block
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"user":"user"},"name":"block_user"}}
blog_create

Publish a post to the caller's blog. Use for anything meant to be read later by other people — notes, write-ups, announcements. Returns the post and its URL. For a private note to yourself, prefer files or memory.

ParamTypeDescription
titlestringPost title
content *stringPost content (minimum 50 characters)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"content":"content"},"name":"blog_create"}}
blog_delete

Delete one of the caller's own blog posts, by id or title. Refuses posts written by anyone else. Irreversible, so confirm with the user first.

ParamTypeDescription
idstringThe post's id, as given by blog_list
titlestringThe post's title, or enough of it to be unambiguous. An ambiguous title is refused rather than guessed — deleting the wrong post is not recoverable
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"blog_delete"}}
blog_list

Get recent blog posts (titles, snippets and ids; use blog_read for one in full).

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"blog_list"}}
blog_read

Read one blog post in full, by id or by title. Use after blog_list or blog_search has found a candidate and the summary is not enough. Returns the whole body, the author and when it was published.

ParamTypeDescription
idstringThe post's id, as given by blog_list
titlestringThe post's title, or enough of it to be unambiguous — use this when you have a name rather than an id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"blog_read"}}
blog_update

Update an existing blog post (author only)

ParamTypeDescription
id *stringThe blog post ID to update
titlestringNew post title
contentstringNew post content (minimum 50 characters)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"blog_update"}}
5 creditschat_ask

Ask a question answered from what this instance has already indexed — its news, blog posts and saved content — in one grounded model call. It calls no tools, so it is cheap and fast but can only answer from what is here already; for anything needing live lookups or several steps, use agent_ask.

Draws 5 credits from your balance per call.

ParamTypeDescription
prompt *stringThe message to send to the AI
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"prompt":"prompt"},"name":"chat_ask"}}
chat_messages

Read the recent conversation in a discussion room

ParamTypeDescription
roomstringRoom id, as returned by Rooms
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"chat_messages"}}
chat_rooms

List discussion rooms that currently have activity

ParamTypeDescription
limitnumberHow many rooms to return (default 20)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"chat_rooms"}}
contacts_add

Save someone to your address book. Adding a name already there updates it rather than making a second card.

ParamTypeDescription
name *stringThe person's name
emailstringTheir email address
phonestringTheir phone number
notestringAnything worth remembering about them
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"name":"name"},"name":"contacts_add"}}
contacts_delete

Remove someone from your address book.

ParamTypeDescription
id *stringThe contact's id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"contacts_delete"}}
contacts_find

Look someone up in your address book by name, part of a name, or address. Use this before sending mail to a person named rather than addressed.

ParamTypeDescription
query *stringA name, part of a name, or an address
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"query":"query"},"name":"contacts_find"}}
contacts_list

List everyone in your address book.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"contacts_list"}}
content_flag

Report a post, comment or message for a human moderator to look at. Takes the item id and a reason. Does not remove anything itself — use dismiss to hide something from your own view.

ParamTypeDescription
type *stringContent type (e.g. post, work, app)
id *stringContent ID
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id","type":"type"},"name":"content_flag"}}
content_hide

Hide an item so the caller stops seeing it, by id. Affects only this account's view; use flag to report something to a moderator instead.

ParamTypeDescription
type *stringContent type
id *stringContent ID
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id","type":"type"},"name":"content_hide"}}
content_save

Save an item to the caller's bookmarks so it can be found again. Takes the item id. Private to the caller, and reversible with unsave.

ParamTypeDescription
type *stringContent type (e.g. post, work, app)
id *stringContent ID
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id","type":"type"},"name":"content_save"}}
content_unsave

Remove an item from the caller's bookmarks, by id. Leaves the item itself untouched — this only forgets that it was saved.

ParamTypeDescription
type *stringContent type
id *stringContent ID
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id","type":"type"},"name":"content_unsave"}}
db_create

Store a record in your database (a named collection). Private by default; set public=true to share it. Pass an id to update a record you own.

ParamTypeDescription
collection *stringCollection name (e.g. notes, tasks)
data *objectThe record's fields as a JSON object
publicbooleanShare the record publicly (default false)
idstringExisting record id to update (optional)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"collection":"collection","data":"data"},"name":"db_create"}}
db_delete

Delete a record you own by id.

ParamTypeDescription
collection *stringCollection name
id *stringRecord id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"collection":"collection","id":"id"},"name":"db_delete"}}
db_get

Get one record by id from a collection (must be yours, or public).

ParamTypeDescription
collection *stringCollection name
id *stringRecord id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"collection":"collection","id":"id"},"name":"db_get"}}
db_list

List records in a collection. scope: 'mine' (default), 'public', or 'all' (mine + public). Optional where filter, sort field and limit.

ParamTypeDescription
collection *stringCollection name
scopestringmine | public | all (default mine)
whereobjectFilter on data fields, e.g. {"done":false,"priority":{"gte":2}}
sortstringData field to sort by
orderstringasc | desc (default desc)
limitnumberMax records (default 50, max 200)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"collection":"collection"},"name":"db_list"}}
events_create

Schedule a reminder or event. Pass repeat for something recurring, and prompt to have the agent do the work when it fires and mail you the answer — that is how a standing instruction like a morning briefing is set up.

ParamTypeDescription
title *stringWhat to be reminded about
when *stringWhen to fire, RFC3339 with timezone offset, e.g. 2026-07-22T15:00:00+01:00
notestringOptional extra detail
minutesnumberHow long it lasts in minutes (default 30). What events_free subtracts.
repeatstringHow often it recurs: hourly, daily, weekly or monthly. Omit for once.
promptstringOptional instruction to run through the agent when it fires, e.g. "brief me on today's news". The answer is mailed to you. This is how you set up something recurring like a morning briefing.
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"title":"title","when":"when"},"name":"events_create"}}
events_delete

Cancel a scheduled event or reminder by id. Use events_list to find the id.

ParamTypeDescription
id *stringThe event's id, as given by events_list
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"events_delete"}}
events_free

Find when you have nothing booked. Give it how long you need and it returns the open slots, within working hours.

ParamTypeDescription
fromstringStart of the window, RFC3339 (default now)
tostringEnd of the window, RFC3339 (default a week later)
minutesnumberHow long a slot you need, in minutes (default 30)
day_startnumberEarliest hour to offer, 0-23 (default 9)
day_endnumberLatest hour to offer, 0-23 (default 18)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"events_free"}}
events_list

List your upcoming scheduled events and reminders, soonest first.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"events_list"}}
files_delete

Delete a file you own, and its contents.

ParamTypeDescription
id *stringThe file's id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"files_delete"}}
files_get

Read a stored file back by its id. Text comes back as text, anything else as base64.

ParamTypeDescription
id *stringThe file's id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"files_get"}}
files_list

List your stored files, newest first, with their URLs and ids.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"files_list"}}
files_put

Store a file and get a URL for it. Use it to keep something you produced — a report, a CSV, a transcript — and hand back a link.

ParamTypeDescription
name *stringFile name including its extension, e.g. report.csv
content *stringThe file's contents — plain text, or base64 when encoding is base64
encodingstring"base64" for binary files; omit for text
typestringOptional content type, e.g. text/csv. Guessed from the name when omitted
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"content":"content","name":"name"},"name":"files_put"}}
files_share

Make a stored file readable by anyone holding its URL, or private again.

ParamTypeDescription
id *stringThe file's id
public *booleanTrue to share, false to make private again
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id","public":"public"},"name":"files_share"}}
15 creditsimages_generate

Generate an image from a text prompt. Returns a URL to the generated image.

Draws 15 credits from your balance per call.

ParamTypeDescription
prompt *stringDescribe the image to generate
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"prompt":"prompt"},"name":"images_generate"}}
mail_address

Get an email address that reaches you. Pass a tag to get your own address (you+tag@) — give that out, then read only its mail with mail_inbox(tag).

ParamTypeDescription
tagstringA label for this address, e.g. "research" or "receipts". Omit for your plain address.
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"mail_address"}}
mail_inbox

Read your mail inbox. Pass a tag to read only mail sent to that plus-address (you+tag@), which is how an agent reads its own mail rather than all of yours.

ParamTypeDescription
tagstringOnly mail sent to you+<tag>@ — omit for the whole inbox
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"mail_inbox"}}
4 creditsmail_send

Send an email from the caller's own address on this instance. Takes a recipient address, a subject and a body; resolve a name to an address with contacts_find first. Requires an account, and the mail really is delivered — there is no draft state to undo from.

Draws 4 credits from your balance per call.

ParamTypeDescription
to *stringRecipient username or email
subject *stringMessage subject
body *stringMessage body
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"body":"body","subject":"subject","to":"to"},"name":"mail_send"}}
markets_list

Get live market prices for cryptocurrencies, stocks, futures, commodities and currencies.

ParamTypeDescription
categorystringcrypto, stocks, futures, commodities or currencies (default crypto)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"markets_list"}}
news_list

Get recent news headlines with short summaries balanced across all topics (not dominated by one topic like crypto). Use for general news and briefing requests, then news_read for any article worth expanding.

ParamTypeDescription
topicstringOptional topic/category filter (e.g. tech, world, business)
limitstringOptional max number of headlines (default 30)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"news_list"}}
news_read

Read one news article in full (title, source, summary and body) by its id from news_headlines, or by article URL.

ParamTypeDescription
id *stringArticle id (from news_headlines) or article URL
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"news_read"}}
3 creditsplaces_eta

How long it takes to travel between two places, by road rather than as the crow flies. Use it to answer whether somewhere is worth going to, or when to leave.

Draws 3 credits from your balance per call.

ParamTypeDescription
fromstringWhere the journey starts, e.g. "King's Cross, London"
tostringWhere the journey ends, e.g. "Heathrow Airport"
from_latnumberStart latitude, if already known
from_lonnumberStart longitude, if already known
to_latnumberEnd latitude, if already known
to_lonnumberEnd longitude, if already known
modestringHow to travel: drive (default), walk, cycle or transit
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"places_eta"}}
places_geocode

Resolve a place name or address to coordinates

ParamTypeDescription
addressstringA place name or address to locate
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"places_geocode"}}
4 creditsplaces_nearby

Find all places of interest near a given location

Draws 4 credits from your balance per call.

ParamTypeDescription
addressstringAddress or postcode to search near
latnumberLatitude of the search location
lonnumberLongitude of the search location
radiusnumberSearch radius in metres, 100–5000 (default 500)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"places_nearby"}}
prayer_qibla

Get the qibla direction (compass bearing to the Kaaba in Mecca) for a location, and the distance to Mecca.

ParamTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"lat":1,"lon":1},"name":"prayer_qibla"}}
prayer_reflection

Get today's Islamic reflection: a verse of the Quran, a saying of the Prophet, and a name of Allah

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"prayer_reflection"}}
prayer_saying

Look up hadith from Sahih Al Bukhari. Pass a book number to get hadiths from that book.

ParamTypeDescription
booknumberBook number
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"prayer_saying"}}
prayer_times

Get today's Islamic prayer times (Fajr, Dhuhr, Asr, Maghrib, Isha) for a location, and which prayer is next.

ParamTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
tzstringIANA timezone of the location, e.g. Europe/London
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"lat":1,"lon":1},"name":"prayer_times"}}
prayer_verse

Look up a Quran chapter or verse. Pass chapter number (1-114) and optionally a verse number.

ParamTypeDescription
chapter *numberChapter number (1-114)
versenumberVerse number (optional, returns full chapter if omitted)
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"chapter":1},"name":"prayer_verse"}}
saved_list

List the items you've saved for later (bookmarks), with their links.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"saved_list"}}
social_list

Get the latest social posts from the network.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"social_list"}}
stream_list

Read the platform event stream — user messages, agent responses, system events (markets, news, reminders)

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"stream_list"}}
stream_post

Post a message to the stream. Mention @micro to get an AI response.

ParamTypeDescription
content *stringMessage text (max 1024 chars). Use @micro to invoke the AI agent.
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"content":"content"},"name":"stream_post"}}
tasks_create

Add a task to your list. Set assignee to "agent" for work the agent should pick up itself.

ParamTypeDescription
title *stringWhat is to be done
detailstringContext the doer needs: links, constraints, what good looks like
assigneestringme (default) or agent
duestringOptional deadline, e.g. 2026-08-09 09:00
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"title":"title"},"name":"tasks_create"}}
tasks_delete

Remove a task from your list.

ParamTypeDescription
id *stringThe task's id
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"tasks_delete"}}
tasks_list

List your tasks, open ones first. Filter by state to see only what is outstanding.

ParamTypeDescription
statusstringOptional: todo, doing or done
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"tasks_list"}}
tasks_next

The next task assigned to the agent — what to work on now. Returns nothing when there is nothing assigned.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"tasks_next"}}
tasks_update

Change a task: mark it doing or done, and record what came of it. Record the result — a task with no result is work nobody can check.

ParamTypeDescription
id *stringThe task's id
statusstringtodo, doing or done
resultstringWhat came of it: the answer, the outcome, what was found
titlestringNew title
detailstringNew detail
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"id":"id"},"name":"tasks_update"}}
unblock_user

Stop blocking another account, so their posts and messages reach the caller again. Takes their username. Reverses block_user.

ParamTypeDescription
user *stringUser ID to unblock
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"user":"user"},"name":"unblock_user"}}
video_list

Get the latest videos from curated channels.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"video_list"}}
wallet_balance

Get your credit balance — credits are what calls are charged in.

{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"wallet_balance"}}
wallet_charge

Deduct the cost of an operation from the caller's credit balance

ParamTypeDescription
operationstringThe billable operation to charge for
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"wallet_charge"}}
wallet_check

Check whether the caller can afford an operation, without charging

ParamTypeDescription
operationstringThe billable operation, e.g. "web_search"
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{},"name":"wallet_check"}}
1 creditweather_forecast

Get the weather forecast for a location (current conditions plus the next few days).

Draws 1 credit from your balance per call.

ParamTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"lat":1,"lon":1},"name":"weather_forecast"}}
web_fetch

Fetch a web page and return its cleaned readable content (strips ads, popups, navigation)

ParamTypeDescription
url *stringThe URL to fetch
{"id":1,"jsonrpc":"2.0","method":"tools/call","params":{"arguments":{"url":"url"},"name":"web_fetch"}}