← All tools
Artifacts
Output a model generated — a document, a table, a diagram, a page — stored so it outlives the session that made it, and optionally published as a link anyone can open.
9Tools
28Parameters
2026-09-16Generated
muninn_artifact_add
Writes
9 parameters
Store a text-based artifact you generated — markdown, plain text, csv, json, code, a mermaid diagram, svg, or an HTML page — so it outlives this session and can be retrieved by any model or from the web app. Use this for OUTPUT you produced (a document, a table, a diagram, a page), not for notes or facts about the user; those are muninn_memory_add. The source is stored in full, never a link. Artifacts are deliberately excluded from semantic search, so give a clear title and tags — that is how they are found again. Returns {success, memoryId, format, url, length, connect}. For html/svg: runs in a sandboxed iframe on a separate origin. LINKS: write a plain absolute <a href> — a Muninn page opens in the same tab, anything else in a new tab; no target attribute needed. READING ANOTHER ARTIFACT: fetch its absolute /raw url. READING AN OUTSIDE API: the sandbox blocks fetch() to any non-Muninn host unless the artifact declares it in `connect` (bare hostnames, e.g. ["api.open-meteo.com"]) — readers are shown the list, and the host must answer Access-Control-Allow-Origin: *. Full rules: muninn_help, section "Authoring artifacts". TO EDIT ONE LATER there is no muninn_artifact_update — an artifact's artifactId IS its memoryId, so redraft it with muninn_memory_update (whole body), muninn_memory_anchor_replace (one span) or muninn_memory_append. Editing replaces in place, and a published artifact's public link refreshes automatically. To choose a format for what you are about to make, and for the `mime` value that goes with it, read the muninn-artifact-formats skill — it holds the whole list. HANDLES: an account can hold several handles (e.g. a personal one and a company one), each a separate public address; an artifact lives under exactly one, and its named page only ever answers there. Pass `handle` only when the user says which one; omit it and the artifact goes under their default (oldest) handle. Move it later with muninn_artifact_move.
| Parameter | Type | Required | Description |
| source |
string |
Required |
The artifact's full source text, stored verbatim. |
| format |
stringmd · txt · csv · json · code · mermaid · svg · html |
Required |
What kind of source this is — selects the renderer. md, txt, csv, json, code, mermaid, svg, or html. |
| title |
string |
— |
Display name for the artifact, e.g. 'BUI org chart'. Strongly recommended: artifacts are not semantically searchable, so the title carries the findability. |
| tags |
string[] |
default [] |
Tags, same as muninn_memory_add. The main way an artifact is found later. |
| project |
string |
— |
Project slug to scope this artifact. Omit for user-global. |
| sourceModel |
string |
— |
Which model produced this, for provenance, e.g. 'claude-opus-5'. |
| mime |
stringtext/html · text/markdown · text/plain · text/x-tex · text/csv · text/tab-separated-values · application/json · application/yaml · application/xml · application/geo+json · text/calendar · text/vcard · text/vnd.mermaid · text/vnd.graphviz · text/vnd.d2 · text/vnd.plantuml · application/vnd.chartjs+json · application/vnd.echarts+json · image/svg+xml · model/gltf+json · model/obj · model/stl · application/pdf · application/zip · application/gzip · application/x-tar · image/png · image/jpeg · image/webp · image/gif · model/gltf-binary · application/vnd.openxmlformats-officedocument.wordprocessingml.document · application/vnd.openxmlformats-officedocument.spreadsheetml.sheet · application/vnd.openxmlformats-officedocument.presentationml.presentation |
— |
The artifact's media type, from the closed list. Sets the file extension on download and nothing else — a mermaid source is text/vnd.mermaid so it exports as .mmd, not .txt. Defaults to text/html. The muninn-artifact-formats skill maps intents to types. |
| handle |
string |
— |
Which of the user's handles this artifact lives under, e.g. 'chai' — only if the user named one. Must be a handle this account holds; any other is refused and nothing is saved. Omit for the default (oldest) handle. Does NOT publish anything. |
| connect |
string[] |
— |
html/svg only: outside hosts this artifact fetches data from at runtime, as bare lowercase hostnames — ["api.open-meteo.com"]. No scheme, path, port, wildcard or IP; at most 8; Muninn's own hosts are already reachable and are refused here. Declare exactly what the source calls: the sandbox blocks fetch() to any host not listed, and every page that shows the artifact names this list to the reader. Not needed for <script src>, images, fonts or styles from a CDN. Change it later with muninn_artifact_connect. |
muninn_artifact_connect
Writes
2 parameters
Declare, change or clear the outside hosts an html/svg artifact may fetch data from at runtime — use when a dashboard or chart reads an external API (weather, prices, a public dataset), when the user says let it load live data from X, or when muninn_artifact_add warned that the source fetches a host `connect` does not declare. The sandbox blocks fetch() and WebSocket to any host not on this list; Muninn's own hosts are always reachable and are refused here. Bare lowercase hostnames only (api.open-meteo.com), no scheme, path, port, wildcard or IP, at most 8. ⚠️ Every page that shows the artifact names this list to the reader, so declare exactly what the source calls and nothing more. The host must answer Access-Control-Allow-Origin: * (the frame's origin is null and can carry no credential) — if it does not, or needs a key, mirror the data into a Muninn json/csv artifact and fetch its /raw instead; never put a key in artifact source, every reader can read it at /raw. Replaces the whole list; pass [] or null to clear it. A published artifact's public copy is updated in the same call. Not needed for <script src>, images, fonts or styles from a CDN. Returns {success, artifactId, connect}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
| connect |
string[] |
Required |
The complete new list of bare hostnames, e.g. ["api.open-meteo.com", "api.coingecko.com"]. Replaces the current list. [] or null clears it, returning the artifact to Muninn-only fetches. |
muninn_artifact_get
Read only
1 parameter
Retrieve a stored artifact by ID — returns its full source plus format, title, provenance, and whether it is currently shared publicly (published + publicUrl, plus expiresAt/expired when the link has an expiry), so you can continue working on something a previous session (or a different model) produced. To WRITE your edit back, pass this artifactId as memoryId to muninn_memory_update, muninn_memory_anchor_replace or muninn_memory_append — there is no muninn_artifact_update, because an artifact's artifactId IS its memoryId. If it is published, the public link refreshes automatically. The returned `rev` is the body's revision number (null if never indexed): hand it back as `expectedRev` on that write and it FAILS rather than clobbering an edit made in between — worth carrying when you fetch now and write later, unnecessary when you write straight away.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
muninn_artifact_list
Read only
4 parameters
List stored artifacts, newest first, optionally narrowed to one format or one handle. Returns slim rows {artifactId, format, title, handle, createdAt, url, published, publicUrl, expiresAt?} — no source bodies, so it is cheap to call before deciding what to fetch. Backed by a D1 index, never a KV scan. Use this to see what you have already made for this user, or to answer 'what have I shared publicly' — every published artifact carries its live public link, and its expiresAt when it has one. A link past its expiry is reported as published: false, expired: true. To edit any row, pass its artifactId as memoryId to muninn_memory_update — there is no muninn_artifact_update. Also returns `handles`, every handle the account can use, so you know the valid values for `handle` on muninn_artifact_add and muninn_artifact_move.
| Parameter | Type | Required | Description |
| format |
stringmd · txt · csv · json · code · mermaid · svg · html |
— |
Restrict to one format, e.g. 'mermaid'. |
| handle |
string |
— |
Restrict to artifacts under one of the user's handles, e.g. 'chai'. Must be a handle this account holds. |
| limit |
integer |
default 50 |
Maximum rows to return. |
| publishedOnly |
boolean |
default false |
Return only artifacts that are currently shared publicly. Use this to answer 'what of mine is publicly reachable'. |
muninn_artifact_move
Writes
Destructive
3 parameters
Move an artifact to another of the user's handles — use when the user says move this to my company handle, put that under chai, this belongs on the other address, or file it under a different handle. An account can hold several handles, each a separate public address, and an artifact lives under exactly one. The target must be a handle this account holds; any other is refused and nothing changes. ⚠️ If the artifact has a named page, its OLD named address (old-handle.munn.is/name) stops working immediately and does NOT redirect; the page answers at the new handle instead. Tell the user, since links they shared on the old address will break. The munn.is/a/<token> link is unaffected. If the target handle already has a page with that name the move is refused; pass `name` to move it under a different name (a new name needs the Paid plan). An artifact under a suspended handle cannot be moved. Does not publish or unpublish anything. Returns {success, artifactId, handle, moved, slug, namedUrl, durableUrl, previousNamedUrl}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
| handle |
string |
Required |
The handle to move it under, e.g. 'chai'. Must be one this account holds — muninn_artifact_list returns the list. |
| name |
string |
— |
Only for a named page: the name to use under the new handle, when its current name is already taken there or the user wants a different one. Omit to keep the current name. |
muninn_artifact_name
Writes
2 parameters
Give a published artifact a readable address under the handle it lives in, rename it, or remove the name — use when the user says name this page, give it a nicer url, rename that link, change the address, or make the link readable. Turns a long token url into something like chai.munn.is/my-notes, plus a durable twin on muninn.bizat.co that keeps working if the short domain ever changes. The artifact must already be published (muninn_artifact_publish); naming does not publish anything and does not change who can read it. Pass name: null to remove the name — that address stops working immediately, while the token link keeps working. Names are unique per handle, so the same name can exist under two of the user's handles. To change WHICH handle the page is under, use muninn_artifact_move. Plan: giving a page a new or changed name is Paid; removing a name, re-applying the same name, and already-named pages continuing to serve work on every plan, as does the munn.is/a/<token> link. Returns {success, artifactId, handle, slug, namedUrl, durableUrl}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
| name |
string |
Required |
The name, e.g. 'my-notes' — letters, numbers and hyphens, no dots or slashes, unique among the named pages under this artifact's handle. A new or changed name needs the Paid plan. Pass null to remove the current name (free). |
muninn_artifact_password
Writes
2 parameters
Set, change or remove the password a reader must type to open a published artifact — use when the user says password protect this, put a password on that link, lock this page, change the password, or remove the password. The artifact must already be published (muninn_artifact_publish); the link itself does not change, so anything already shared keeps working and now asks for the password. ⚠️ The password is stored one-way and can NEVER be read back — not by the user, not by support, not by this tool. Say the exact password back to the user when you set it, because this is the only time it is visible; a forgotten one is replaced, not recovered. Pass password: null to remove it and make the link open freely again. Giving two artifacts the SAME password puts them behind one lock, so unlocking either opens both — that is how a locked page can embed another locked page. A different password keeps them separate. This is a gate on the page, not encryption of the artifact. ⚠️ If one artifact fetches another as data, give BOTH the same password (one lock) or leave the data one open — two different passwords means the fetch gets 401. Returns {success, artifactId, hasPassword}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
| password |
string |
Required |
The password readers must type, 4-128 characters. Use exactly what the user asked for — never invent one, and never change one without being asked. Pass null to remove the password entirely. |
muninn_artifact_publish
Writes
4 parameters
Share a stored artifact publicly and get back a link anyone can open — use when the user says publish this, share this, make this public, give me a link to send someone, put this on the web, or asks for a URL they can paste into a chat or an email. Returns a short unguessable munn.is link that renders the artifact for anyone holding it: no login, no account, not indexed by search engines. The published copy stays LIVE — later edits to the artifact update what the link serves. Optionally pass `name` to give the page a readable address under the handle the artifact lives in, e.g. chai.munn.is/my-notes (a new or changed name needs the Paid plan; the munn.is/a/<token> link is free on every plan). To put it under a different handle, muninn_artifact_move first. Publishing is only ever this tool: never assume an artifact is public, and never publish as part of saving or editing something. Optionally pass `expiresAt` (ISO 8601 date or datetime) when the user wants the link to stop working after a date — e.g. share this until Friday, expire the link next week, only valid for 7 days. After that moment the link opens for nobody and the publish is removed the first time someone tries it; the artifact itself is kept. Calling publish again on a published artifact keeps its link and lets you change the expiry (pass null to remove it); publishing an expired one mints a new link. muninn_artifact_unpublish revokes the link. Returns {success, artifactId, publicUrl, namedUrl, durableUrl, live, expiresAt}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
| name |
string |
— |
Optional readable name for the page, e.g. 'my-notes' — becomes <handle>.munn.is/my-notes, under the handle the artifact lives in. Letters, numbers and hyphens only; no dots or slashes. Unique per handle, not per account. Only gets an address if the artifact is under an active handle. A new or changed name needs the Paid plan; re-applying the page's current name does not. Publishing still succeeds if the name is rejected (taken, invalid, or not on the Paid plan). |
| expiresAt |
string |
— |
Optional moment the public link stops opening, ISO 8601: a datetime with offset such as '2026-10-01T17:00:00+07:00', or a bare date '2026-10-01' (read as 00:00 UTC, so the link is already closed on that date). Must be in the future. Only set one the user asked for, and resolve relative phrases ('for a week') against today's date. Omit to keep the current expiry on an already-published artifact; pass null to remove it. The link is refused after this moment and removed from the published list when someone next opens it. |
| password |
string |
— |
Optional password a reader must type before the page opens. Only pass a password the user actually stated — never invent one, and never set one they did not ask for. It cannot be read back afterwards by anyone, including the user: it can only be replaced or removed with muninn_artifact_password. Tell the user the exact password you set, since this is the only moment it is visible. |
muninn_artifact_unpublish
Writes
Destructive
1 parameter
Revoke an artifact's public link — use when the user says unpublish, unshare, make this private again, take it down, or stop sharing that link. Deletes the public copy outright, so the URL stops working immediately for everyone who has it; the artifact itself is untouched and stays in Muninn. Any readable name it had goes with it, so the named address stops resolving too. ⚠️ Irreversible for that URL: publishing again mints a NEW link, and every copy of the old one is dead. Safe to call on an artifact that was never published. Returns {success, artifactId, wasPublished}.
| Parameter | Type | Required | Description |
| artifactId |
string |
Required |
The artifact's memory ID (full UUID or a unique prefix). |
← Back to all 74 tools
Every artifacts tool on this page is callable the moment a model is connected, on an account that costs nothing.
150 items free — memories, skills, bundles, tasks, table rows and artifacts all count. No card, and free does not expire. Paid lifts the limit.