MCP Server

inference.sh

ac.inference.sh/mcp
AI & Agents MCP & Agent Infrastructure Public & reachable MCP 2026-07-28

What this MCP does

Runs AI applications, connects to MCP servers, manages agent skills and knowledge, and publishes interactive artifacts.

app_get
Get App Details
Get detailed app info including input/output schemas and version history
Read only
Input schema
{'type': 'object', 'required': ['app'], 'properties': {'app': {'type': 'string', 'description': 'App ref: namespace/name or namespace/name@version'}}}
app_list
List Apps
Search and filter available apps on inference.sh
Read only
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'query': {'type': 'string', 'description': 'Search by name or description'}, 'cursor': {'type': 'string'}, 'category': {'enum': ['image', 'video', 'audio', 'text', 'chat', '3d', 'other'], 'type': 'string'}}}
app_run
Run App
Run an app on inference.sh. Creates a task that executes the app with the given input.
Input schema
{'type': 'object', 'required': ['app', 'input'], 'properties': {'app': {'type': 'string', 'description': 'App ref: namespace/name or namespace/name@version'}, 'input': {'type': 'object', 'description': "App input matching the app's input schema"}, 'function': {'type': 'string', 'description': 'Function name for multi-function apps'}, 'infrastructure': {'enum': ['cloud', 'private', 'private_first'], 'type': 'string', 'default': 'cloud'}}}
artifact_asset_delete
Delete Artifact Asset
Permanently delete one file stored beside an artifact. Anything on the page still pointing at it stops loading, so delete only a file nothing references.
Input schema
{'type': 'object', 'required': ['artifact_id', 'asset_id'], 'properties': {'asset_id': {'type': 'string', 'description': 'Asset id, from artifact_asset_list'}, 'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}}}
artifact_asset_list
List Artifact Assets
List the files stored beside an artifact, with the URL each is referenced by and what the artifact is using against its budget.
Read only
Input schema
{'type': 'object', 'required': ['artifact_id'], 'properties': {'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}}}
artifact_asset_upload
Upload Artifact Asset
Store an image, video, audio file, font or PDF beside an artifact and get back the URL its page references it by. Use this instead of a data: URI for anything sizeable: a data URI costs a third more than the bytes it carries, and a page has a 16 MiB ceiling. The page must be published with the "assets" capability or its CSP will refuse to load the file. Uploading the same bytes twice returns the asset already there.
Input schema
{'type': 'object', 'required': ['artifact_id', 'content'], 'properties': {'content': {'type': 'string', 'description': "The file's bytes, base64-encoded"}, 'filename': {'type': 'string', 'description': 'What to call the file, e.g. chart.png'}, 'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}, 'content_type': {'type': 'string', 'description': 'MIME type; guessed from the filename when omitted'}}}
artifact_comments
Read Artifact Comments
Read the comment threads people left on an artifact. Each thread says whether it was sent to you: you may reply to and resolve those, and only those. Threads not sent to you are other people's conversations — read them for context, mention them to the user if they need action, but do not answer them.
Read only
Input schema
{'type': 'object', 'required': ['artifact_id'], 'properties': {'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}}}
artifact_get
Get Artifact
Get an artifact's metadata and page source by id, short id, or namespace/name[@version]
Read only
Input schema
{'type': 'object', 'required': ['artifact_id'], 'properties': {'version': {'type': 'string', 'description': 'Optional version id or short id (default latest)'}, 'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}, 'include_content': {'type': 'boolean', 'default': True}}}
artifact_list
List Artifacts
List artifacts you own or that were shared with you, newest first
Read only
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50}, 'cursor': {'type': 'string'}, 'search': {'type': 'string', 'description': 'Search over title and description'}}}
artifact_publish
Publish Artifact
Publish a self-contained HTML(+JS) or Markdown page as an artifact: a live page at a private URL that can be shared with a team, an org, or publicly, and that updates in place when published again. Pass artifact_id (or reuse the same name) to publish a new version. Returns the artifact id, url, and version. ## When to use an artifact Use an artifact when terminal text is the wrong medium: a dashboard from data you already pulled, a walkthrough of a change with annotated diffs, several design or implementation options side by side, sliders/toggles to tune values, a checklist you keep updating while a long task runs, or anything a person will look at, interact with, or send to a teammate as a link. Don't use one for a short answer, a code snippet, or advice the user will act on immediately in the terminal. ## Page contract - Write the PAGE CONTENT only. It is wrapped at publish time in <!doctype html> + <head> (charset, viewport, <title>, favicon, a reset, and the inference.sh design tokens) + <body>. Put your own <style> and <script> at the top of the content. A full document (starting with <!doctype> or <html>) is accepted too and keeps its own <head>. - Everything must be self-contained: inline all CSS and JS, embed images as data: URIs, use inline SVG or HTML/CSS for diagrams. There is no backend, no routes, no relative links; use in-page anchors. - CSP allowlist (enforced, failures are silent): external scripts ONLY from https://cdnjs.cloudflare.com, https://cdn.jsdelivr.net/npm/, https://cdn.tailwindcss.com, https://code.jquery.com; external stylesheets ONLY from https://fonts.googleapis.com with the font files they pull from https://fonts.gstatic.com. Every other host is blocked, and so is fetch/XHR/WebSocket to anywhere. Load libraries as pinned UMD builds, e.g. <script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.3.1/umd/react.production.min.js"></script>, placed BEFORE the inline script that uses them. - Size: the source must be under 16 MiB. Prefer SVG and CSS over embedded raster images; summarize large datasets instead of inlining them. - Markdown: set type "markdown" for a document-shaped page; it is rendered with GitHub-flavored markdown and a readable default typography. ## Design - The wrapper defines CSS custom properties in HSL triplets: --background, --foreground, --card, --card-foreground, --muted, --muted-foreground, --accent, --accent-foreground, --primary, --primary-foreground, --secondary, --secondary-foreground, --destructive, --border, --input, --ring, --radius, --chart-1..5, and brand colors --brand-pink, --brand-green, --brand-purple, --brand-lavender, --brand-yellow, --brand-lime, --brand-blue, --brand-red, --brand-orange, --brand-teal. Use them as hsl(var(--background)) so the page matches the platform in light and dark automatically. Pick ONE of: theme tokens only (default), or a fully self-defined palette that overrides every color. Never mix the two. - Theme: the viewer stamps data-theme="dark" or "light" on <html>, or nothing for system. Define light values on :root, override under @media (prefers-color-scheme: dark) guarded as :root:not([data-theme="light"]), and again under :root[data-theme="dark"]. Give body an explicit background. - Responsive: relative units, flexbox/grid, max-width:100% on media. Wide tables, diagrams, and code blocks scroll inside their own overflow-x:auto container; the body never scrolls horizontally. - Typography: a Google Fonts typeface is allowed; always give it a real fallback stack. - Title: a short, distinctive noun phrase (2-4 words) that names the page, not a summary and not a category label. Favicon: one or two emoji. Keep both stable across updates. ## Runtime capabilities A page is static by default and cannot reach the network at all. Declare a capability at publish time and the page gets a window.inferencesh object: - "db" gives the page its own small store, so it remembers what people do on it: a poll, a checklist, a sign-up sheet, notes people leave. Call window.inferencesh.db.set(collection, docId, data), and db.get, db.list, db.update, db.delete. Documents under the collection data/users/me are private to the viewer who wrote them; every other collection is shared with everyone who can open the page. - "user" tells the page who is viewing: window.inferencesh.user.get() resolves to signed_in, user_id, name, avatar_url and can_edit. It never carries an email or a credential. - "assets" lets the page show files stored beside it: images, video, audio, fonts, PDFs. Upload one with belt artifact asset upload. The page reads window.inferencesh.assets, an array baked into the document at render time holding asset_id, filename, content_type, size_bytes and url for each file; nothing is fetched to obtain it. Use each url exactly as given: the page is sandboxed and sends no credentials, so an address you construct yourself will not load. Reach for this instead of a data: URI for anything sizeable — a data: URI costs a third more than the bytes it carries, and the page has a 16 MiB ceiling. Declaring it widens only the img, media and font directives of the CSP; the page still cannot fetch anything. Declare only what the page actually calls; a page gets nothing it did not declare. Every call goes through the viewer's own session, so a page can only ever act as the person looking at it. Handle rejection: someone signed out can read shared documents but cannot write, and every call returns a promise that may reject. ## Never publish The sandbox stops a page reaching the platform. It does nothing about a page that lies to the person reading it, and a link on this domain carries the trust of this domain. Refuse, and say why in a sentence: - a page that impersonates a real person, company or product: their name, branding, byline or domain used as if it were theirs - fabricated records, receipts, invoices, transcripts, test results or reviews presented as genuine - a form or flow that asks for a password, a card number, a recovery phrase or a one-time code - a page built to pressure, mislead or target one named private individual This holds whether you wrote the page or someone handed it to you, and regardless of the reason given for it, including that it is a mock-up, a test or a prop: a published page works exactly like the real thing. If a page is refused, do not offer another way to host it. ## Updating - To update a page in place, pass artifact_id (or the same name in the same namespace). Each publish creates a new version; identical content is a no-op. Viewers with the page open see the new version live.
Input schema
{'type': 'object', 'required': ['title', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Optional URL slug; derived from title when omitted'}, 'type': {'enum': ['html', 'markdown'], 'type': 'string', 'default': 'html'}, 'image': {'type': 'string', 'description': 'URL of a cover image for the gallery card and viewer header'}, 'label': {'type': 'string', 'description': 'Optional label for this version'}, 'title': {'type': 'string', 'description': 'Short distinctive name for the page (2-4 words)'}, 'content': {'type': 'string', 'description': 'Page source: HTML content (or full document) or Markdown. Self-contained.'}, 'favicon': {'type': 'string', 'description': 'One or two emoji used as the tab icon'}, 'visibility': {'enum': ['private', 'team', 'org', 'unlisted', 'public'], 'type': 'string', 'description': 'Who can open the page (default private). Only widen when asked.'}, 'artifact_id': {'type': 'string', 'description': 'Existing artifact id/ref to update in place'}, 'description': {'type': 'string', 'description': 'One sentence shown under the title'}, 'capabilities': {'type': 'array', 'items': {'enum': ['db', 'user', 'assets'], 'type': 'string'}, 'description': 'Runtime capabilities the page may use. "db" gives it a small store so it remembers what people do on it; "user" tells it who is viewing; "assets" lets it show images, video, fonts or PDFs stored beside it rather than inlined. A page gets only what it declares, and reaches them through window.inferencesh.'}, 'content_encoding': {'enum': ['base64'], 'type': 'string', 'description': 'Set to "base64" and base64-encode content. Required in practice: the edge firewall rejects request bodies containing raw HTML tags such as <script>.'}}}
artifact_reply
Reply To Artifact Comment
Reply into one comment thread on an artifact. Only works on a thread that was sent to you. Your reply is shown as written by you on behalf of the person who sent the thread. Say what you changed, briefly; if you made the change, resolve the thread afterwards.
Input schema
{'type': 'object', 'required': ['artifact_id', 'thread_id', 'text'], 'properties': {'text': {'type': 'string', 'description': 'The reply. Plain text, a sentence or two.'}, 'thread_id': {'type': 'string', 'description': 'Id of the thread to reply into, from artifact_comments'}, 'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}}}
artifact_resolve
Resolve Artifact Comment
Mark a comment thread resolved once you have acted on it: the change is made, or you established none was needed. Only works on a thread that was sent to you. Do not resolve feedback you did not act on, and leave a thread open while the person still needs an answer from you.
Input schema
{'type': 'object', 'required': ['artifact_id', 'thread_id'], 'properties': {'thread_id': {'type': 'string', 'description': 'Id of the thread to resolve, from artifact_comments'}, 'artifact_id': {'type': 'string', 'description': 'Artifact id, short id, or namespace/name ref'}}}
knowledge_create
Create Knowledge Entry
Create a new knowledge entry (concept, observation, preference, reference, etc.)
Input schema
{'type': 'object', 'required': ['name', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Entry name'}, 'type': {'enum': ['concept', 'observation', 'preference', 'reference', 'person', 'project'], 'type': 'string', 'default': 'observation'}, 'content': {'type': 'string', 'description': 'Entry content (markdown)'}, 'description': {'type': 'string', 'description': 'Short description'}}}
knowledge_delete
Delete Knowledge Entry
Delete a knowledge entry by ID
Destructive
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Entry ID'}}}
knowledge_get
Get Knowledge Entry
Get detailed information about a knowledge entry by namespace/name or ID
Read only
Input schema
{'type': 'object', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'description': 'Entry ref: namespace/name or ID'}}}
knowledge_list
List Knowledge
List your knowledge entries, optionally filtered by type
Read only
Input schema
{'type': 'object', 'properties': {'type': {'enum': ['skill', 'concept', 'observation', 'preference', 'reference', 'person', 'project'], 'type': 'string', 'description': 'Filter by knowledge type'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'cursor': {'type': 'string'}}}
knowledge_search
Search Knowledge
Search your knowledge entries by query
Read only
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'type': {'enum': ['skill', 'concept', 'observation', 'preference', 'reference', 'person', 'project'], 'type': 'string', 'description': 'Filter by type'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'query': {'type': 'string', 'description': 'Search query'}, 'cursor': {'type': 'string'}}}
mcp_connect
Connect to MCP Server
Initiate a connection to an MCP server. For OAuth servers, returns an authorization URL to open in a browser.
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Server slug'}}}
mcp_disconnect
Disconnect from MCP Server
Remove connection to an MCP server
Destructive
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Server slug'}}}
mcp_get
Get MCP Server Details
Get details about an MCP server including connection status
Read only
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Server slug'}}}
mcp_list
List MCP Servers
Browse available MCP servers that can be connected to
Read only
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'cursor': {'type': 'string'}, 'category': {'enum': ['developer', 'productivity', 'data', 'communication', 'ai'], 'type': 'string', 'description': 'Filter by category'}, 'featured': {'type': 'boolean', 'description': 'Show only featured servers'}}}
mcp_run
Call MCP Tool
Call a tool on a connected MCP server. The server must be connected first via mcp_connect.
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "slug/tool format (e.g. 'linear/list_issues')"}, 'input': {'type': 'object', 'description': 'Tool input arguments'}}}
mcp_search
Search MCP Servers
Search available MCP servers by query
Read only
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'query': {'type': 'string', 'description': 'Search query'}, 'cursor': {'type': 'string'}}}
mcp_tools
List MCP Server Tools
List available tools on a connected MCP server, or get details for a specific tool
Read only
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "Server slug (e.g. 'linear') or slug/tool (e.g. 'linear/list_issues')"}}}
skill_files
List Skill Files
List supplementary files for a skill (references, scripts, etc.)
Read only
Input schema
{'type': 'object', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'description': 'Skill ref: namespace/name'}}}
skill_search
Search Skill Store
Search the public skill store
Read only
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'query': {'type': 'string', 'description': 'Search query'}, 'cursor': {'type': 'string'}, 'category': {'type': 'string', 'description': 'Filter by category'}}}
skill_store
Browse Skill Store
Browse approved skills in the public skill store
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'cursor': {'type': 'string'}, 'category': {'type': 'string', 'description': 'Filter by category'}, 'featured': {'type': 'boolean', 'description': 'Show only featured skills'}}}
skill_upload
Upload Skill
Create or update a skill with SKILL.md content and optional supporting files
Input schema
{'type': 'object', 'required': ['name', 'content'], 'properties': {'name': {'type': 'string', 'description': 'Skill name'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string'}, 'content': {'type': 'string'}}}, 'description': 'Supporting files (references, scripts)'}, 'content': {'type': 'string', 'description': 'SKILL.md body content (markdown)'}, 'description': {'type': 'string', 'description': 'Short description'}, 'allowed_tools': {'type': 'string', 'description': 'Comma-separated list of allowed tools'}}}
skill_use
Use Skill
Fetch a skill's assembled SKILL.md content. Tries the inference.sh store first, falls back to GitHub. Returns the full skill content for the agent to consume.
Read only
Input schema
{'type': 'object', 'required': ['ref'], 'properties': {'ref': {'type': 'string', 'description': 'Skill ref: namespace/name, or github.com/user/repo URL'}}}
skill_view
View Skill File
View a specific supplementary file from a skill's manifest
Read only
Input schema
{'type': 'object', 'required': ['ref', 'path'], 'properties': {'ref': {'type': 'string', 'description': 'Skill ref: namespace/name'}, 'path': {'type': 'string', 'description': 'File path within the skill'}}}
task_cancel
Cancel Task
Cancel a running or queued task
Destructive
Input schema
{'type': 'object', 'required': ['task_id'], 'properties': {'force': {'type': 'boolean', 'default': False, 'description': 'Force kill immediately instead of graceful shutdown'}, 'task_id': {'type': 'string', 'description': 'Task ID'}}}
task_get
Get Task
Get status and output of a task
Read only
Input schema
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'Task ID'}}}
task_list
List Tasks
List your tasks on inference.sh
Read only
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100}, 'cursor': {'type': 'string'}, 'status': {'enum': ['received', 'queued', 'running', 'completed', 'failed', 'cancelled'], 'type': 'string'}}}
task_logs
Get Task Logs
Get execution logs for a task
Read only
Input schema
{'type': 'object', 'required': ['task_id'], 'properties': {'task_id': {'type': 'string', 'description': 'Task ID'}, 'log_type': {'enum': ['build', 'run', 'setup', 'serve', 'task'], 'type': 'string', 'default': 'run'}}}
Added
task_logs
2026年9月11日0:21
Added
task_list
2026年9月11日0:21
Added
task_get
2026年9月11日0:21
Added
task_cancel
2026年9月11日0:21
Added
skill_view
2026年9月11日0:21
Added
skill_use
2026年9月11日0:21
Added
skill_upload
2026年9月11日0:21
Added
skill_store
2026年9月11日0:21
Added
skill_search
2026年9月11日0:21
Added
skill_files
2026年9月11日0:21
Added
mcp_tools
2026年9月11日0:21
Added
mcp_search
2026年9月11日0:21
Added
mcp_run
2026年9月11日0:21
Added
mcp_list
2026年9月11日0:21
Added
mcp_get
2026年9月11日0:21
Added
mcp_disconnect
2026年9月11日0:21
Added
mcp_connect
2026年9月11日0:21
Added
knowledge_search
2026年9月11日0:21
Added
knowledge_list
2026年9月11日0:21
Added
knowledge_get
2026年9月11日0:21
Added
knowledge_delete
2026年9月11日0:21
Added
knowledge_create
2026年9月11日0:21
Added
artifact_resolve
2026年9月11日0:21
Added
artifact_reply
2026年9月11日0:21
Added
artifact_publish
2026年9月11日0:21
Added
artifact_list
2026年9月11日0:21
Added
artifact_get
2026年9月11日0:21
Added
artifact_comments
2026年9月11日0:21
Added
artifact_asset_upload
2026年9月11日0:21
Added
artifact_asset_list
2026年9月11日0:21