LeaderboardBack to leaderboard — loading return destination
Opening report…
Loading report overview
M
MCP server
server.example.com/mcp
Tools and resources for your MCP client, with a public quality report and detailed checks.
Protocol
MCP 2025-11-25
Server version
1.0.0
Website
server.example.com
Supports
Tools · Resources
Overall score
90 /100
How is this score calculated?
Server metadata
Loading server metadata
Reviewed90/100
Discoverability
Loading discoverability
Reviewed90/100
Protocol
Loading protocol
Reviewed90/100
Tools
Loading tools
Reviewed90/100
MCP Apps
Loading mcp apps
Reviewed90/100
Tool documentation quality
Loading tool documentation quality
Reviewed90/100
LeaderboardBack to leaderboard — loading return destination
S
Slaide
app.slaide.de/api/mcp
Builds, edits and exports presentations, documents and Excel workbooks in the user's own Slaide account: create a new one from a brief, notes or attached files, find and read existing ones, change them by instruction, and export them as PowerPoint, PDF, Word, PNG or Excel files.
Builds, edits and exports presentations, documents and Excel workbooks in the user's own Slaide account: create a new one from a brief, notes or attached files, find and read existing ones, change them by instruction, and export them as PowerPoint, PDF, Word, PNG or Excel files.
Slaide builds and edits real presentations and documents in the user's own Slaide account. To make a NEW document, call create_document straight away. To read, change or export an EXISTING one, find it with search_documents, read it with get_document, then call update_document or export_document. Building takes minutes and runs in the background — create_document, update_document and export_document return a job_id, and you must not start the same job twice. If the chat shows the user a live progress card for the job, the card follows the job by itself: say in a sentence or two what was started and stop instead of polling. Without such a card, poll get_job (respecting poll_after_ms) and keep the user informed instead of waiting silently. Never present a document as finished before the card or get_job reports it. When you use Slaide, do not write slide-by-slide layouts yourself: describe the goal, the audience and the content, and let Slaide design it with the user's saved brand kit, if they have one. Creating and updating follow the same account limits as the Slaide web app; exporting an existing document does not start a new build.
Discoverability
0/6 passed0 of 6 passed0/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
No matching mcp.json manifest or MCP Server Card was found at the checked URLs.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Use this when the user refers to an existing presentation or document in their own Slaide library — by name, topic or recency ("my Project Alpha deck", "the deck I edited last") — or asks what they have. Matches the title only, as one phrase; if nothing matches, search again with a single keyword or without `query` to see the most recently edited ones. Do this FIRST: you need a document_id before you can read, update or export anything, and document_ids are opaque ids, never titles, so never guess one. Do NOT use it to create anything. Returns a short list; follow up with get_document to see the content.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Words from the document title, matched as one phrase. Omit to list the most recently edited documents.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many documents to return. Omit for 10.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"documents",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "Number of entries in `documents`."
},
"documents": {
"type": "array",
"items": {
"type": "object",
"required": [
"document_id",
"title",
"format",
"updated_at",
"page_count",
"app_url"
],
"properties": {
"title": {
"type": "string",
"description": "Title as shown in the user's Slaide library."
},
"format": {
"type": "string",
"description": "Page format of the document, for example `a4-portrait` for a text document or a slide format for a presentation."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"page_count": {
"type": "number",
"description": "Number of pages or slides."
},
"updated_at": {
"type": "string",
"description": "Time of the last change to the document."
},
"document_id": {
"type": "string",
"description": "Opaque id of the document. Pass it to get_document, update_document or export_document."
}
},
"additionalProperties": {}
},
"description": "The matching documents. Empty when nothing matched."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "search_documents",
"title": "Search Slaide documents",
"description": "Use this when the user refers to an existing presentation or document in their own Slaide library — by name, topic or recency (\"my Project Alpha deck\", \"the deck I edited last\") — or asks what they have. Matches the title only, as one phrase; if nothing matches, search again with a single keyword or without `query` to see the most recently edited ones. Do this FIRST: you need a document_id before you can read, update or export anything, and document_ids are opaque ids, never titles, so never guess one. Do NOT use it to create anything. Returns a short list; follow up with get_document to see the content.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many documents to return. Omit for 10."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Words from the document title, matched as one phrase. Omit to list the most recently edited documents."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"documents",
"count"
],
"properties": {
"count": {
"type": "number",
"description": "Number of entries in `documents`."
},
"documents": {
"type": "array",
"items": {
"type": "object",
"required": [
"document_id",
"title",
"format",
"updated_at",
"page_count",
"app_url"
],
"properties": {
"title": {
"type": "string",
"description": "Title as shown in the user's Slaide library."
},
"format": {
"type": "string",
"description": "Page format of the document, for example `a4-portrait` for a text document or a slide format for a presentation."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"page_count": {
"type": "number",
"description": "Number of pages or slides."
},
"updated_at": {
"type": "string",
"description": "Time of the last change to the document."
},
"document_id": {
"type": "string",
"description": "Opaque id of the document. Pass it to get_document, update_document or export_document."
}
},
"additionalProperties": {}
},
"description": "The matching documents. Empty when nothing matched."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Search Slaide documents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this when you need to see what is in one of the user's own Slaide documents: its title, format, page-by-page content, speaker notes, Excel workbook sheets, current version and supported export formats. Call this before update_document so you know what is actually on the pages — and keep the returned `version`, you pass it back as `expected_version` to make sure you do not overwrite someone else's change. Use detail:'outline' when you only need the structure (cheapest), 'content' for the text (default), 'full' only when you genuinely need the raw page HTML. Pages are numbered from 1, exactly as the user sees them in Slaide ("page 4" is page 4). For a long document pass `pages` to read only the pages you need; if a response lists `truncated.omitted_pages`, fetch those in a second call. For Excel, use workbook_name, sheet_name and row_start to read another portion of a sheet. Requires a document_id from search_documents.
The description explains the capability, when to use it, and what to expect.
Inputs93/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document_id
Opaque id of the document, taken from search_documents or from a job result. Never a title.
Clear enough to supply this argument.
detail
How much of each page to return: `outline` gives only the first heading, `content` the readable text, `full` the raw page HTML. Omit for `content`.
Clear enough to supply this argument.
pages
Page numbers to read, counted as the user sees them in Slaide. Omit to read the whole document.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
workbook_name
Read only this workbook. Use a `name` from `workbooks` of an earlier get_document response. Omit for all workbooks.
Clear enough to supply this argument.
sheet_name
Read only the sheet with this name, as listed under `workbooks[].sheets[].name`. Omit for all sheets.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
row_start
Sheet row at which reading begins, to page through a long sheet. Omit to start at the first row.
Clear enough to supply this argument.
row_limit
How many rows to return per sheet. Omit for 20, or 100 with detail `full`. Detail `outline` returns no rows.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id",
"title",
"format",
"version",
"updated_at",
"page_count",
"is_running",
"app_url",
"available_exports",
"pages",
"workbooks"
],
"properties": {
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"text"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1, as the user sees it in Slaide."
},
"text": {
"type": "string",
"description": "Depending on `detail`: the first heading, the readable page text, or the raw page HTML. Very long pages are cut off."
},
"speaker_notes": {
"type": "string",
"description": "Speaker notes of the page, when it has any. Not returned with detail `outline`."
}
},
"additionalProperties": {}
},
"description": "The requested pages, in document order."
},
"title": {
"type": "string",
"description": "Title as shown in the user's Slaide library."
},
"format": {
"type": "string",
"description": "Page format of the document, for example `a4-portrait` for a text document or a slide format for a presentation. `excel-model` marks a document that holds only workbooks."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"version": {
"type": "number",
"description": "Current revision of the document. Pass it as `expected_version` to update_document."
},
"truncated": {
"type": "object",
"required": [
"omitted_pages",
"hint"
],
"properties": {
"hint": {
"type": "string",
"description": "What to do next, in plain words."
},
"omitted_pages": {
"type": "array",
"items": {
"type": "number"
},
"description": "Page numbers that were left out. Request them with `pages` in a second call."
}
},
"description": "Present only when not every requested page fit into one response.",
"additionalProperties": {}
},
"workbooks": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"sheets"
],
"properties": {
"name": {
"type": "string",
"description": "Workbook name. Pass it as `workbook_name` here or to export_document."
},
"sheets": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"row_count",
"column_count",
"rows",
"omitted_rows"
],
"properties": {
"name": {
"type": "string",
"description": "Sheet name. Pass it as `sheet_name` to read only this sheet."
},
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"row",
"cells"
],
"properties": {
"row": {
"type": "number",
"description": "Row number, starting at 1."
},
"cells": {
"type": "array",
"items": {
"type": "string"
},
"description": "The cells of the row as text, left to right."
}
},
"additionalProperties": {}
},
"description": "The rows returned in this response."
},
"row_count": {
"type": "number",
"description": "Total number of rows in the sheet."
},
"column_count": {
"type": "number",
"description": "Number of columns in the widest row of the sheet."
},
"omitted_rows": {
"type": "number",
"description": "Rows after the returned ones that are not in this response. Read them with a higher `row_start`."
}
},
"additionalProperties": {}
},
"description": "The sheets of the workbook."
}
},
"additionalProperties": {}
},
"description": "Excel workbooks stored in the document. Empty when it has none."
},
"is_running": {
"type": "boolean",
"description": "True while a Slaide run is still working on this document; its content may still change."
},
"page_count": {
"type": "number",
"description": "Number of pages or slides in the whole document, not only the ones returned here."
},
"updated_at": {
"type": "string",
"description": "Time of the last change to the document."
},
"document_id": {
"type": "string",
"description": "Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"available_exports": {
"type": "array",
"items": {
"type": "string"
},
"description": "File types this document can be exported to with export_document."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_document",
"title": "Read a Slaide document",
"description": "Use this when you need to see what is in one of the user's own Slaide documents: its title, format, page-by-page content, speaker notes, Excel workbook sheets, current version and supported export formats. Call this before update_document so you know what is actually on the pages — and keep the returned `version`, you pass it back as `expected_version` to make sure you do not overwrite someone else's change. Use detail:'outline' when you only need the structure (cheapest), 'content' for the text (default), 'full' only when you genuinely need the raw page HTML. Pages are numbered from 1, exactly as the user sees them in Slaide (\"page 4\" is page 4). For a long document pass `pages` to read only the pages you need; if a response lists `truncated.omitted_pages`, fetch those in a second call. For Excel, use workbook_name, sheet_name and row_start to read another portion of a sheet. Requires a document_id from search_documents.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id"
],
"properties": {
"pages": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"maxItems": 100,
"description": "Page numbers to read, counted as the user sees them in Slaide. Omit to read the whole document."
},
"detail": {
"enum": [
"outline",
"content",
"full"
],
"type": "string",
"description": "How much of each page to return: `outline` gives only the first heading, `content` the readable text, `full` the raw page HTML. Omit for `content`."
},
"row_limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "How many rows to return per sheet. Omit for 20, or 100 with detail `full`. Detail `outline` returns no rows."
},
"row_start": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Sheet row at which reading begins, to page through a long sheet. Omit to start at the first row."
},
"sheet_name": {
"type": "string",
"maxLength": 31,
"description": "Read only the sheet with this name, as listed under `workbooks[].sheets[].name`. Omit for all sheets."
},
"document_id": {
"type": "string",
"maxLength": 100,
"description": "Opaque id of the document, taken from search_documents or from a job result. Never a title."
},
"workbook_name": {
"type": "string",
"maxLength": 160,
"description": "Read only this workbook. Use a `name` from `workbooks` of an earlier get_document response. Omit for all workbooks."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id",
"title",
"format",
"version",
"updated_at",
"page_count",
"is_running",
"app_url",
"available_exports",
"pages",
"workbooks"
],
"properties": {
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"text"
],
"properties": {
"page": {
"type": "number",
"description": "Page number, starting at 1, as the user sees it in Slaide."
},
"text": {
"type": "string",
"description": "Depending on `detail`: the first heading, the readable page text, or the raw page HTML. Very long pages are cut off."
},
"speaker_notes": {
"type": "string",
"description": "Speaker notes of the page, when it has any. Not returned with detail `outline`."
}
},
"additionalProperties": {}
},
"description": "The requested pages, in document order."
},
"title": {
"type": "string",
"description": "Title as shown in the user's Slaide library."
},
"format": {
"type": "string",
"description": "Page format of the document, for example `a4-portrait` for a text document or a slide format for a presentation. `excel-model` marks a document that holds only workbooks."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"version": {
"type": "number",
"description": "Current revision of the document. Pass it as `expected_version` to update_document."
},
"truncated": {
"type": "object",
"required": [
"omitted_pages",
"hint"
],
"properties": {
"hint": {
"type": "string",
"description": "What to do next, in plain words."
},
"omitted_pages": {
"type": "array",
"items": {
"type": "number"
},
"description": "Page numbers that were left out. Request them with `pages` in a second call."
}
},
"description": "Present only when not every requested page fit into one response.",
"additionalProperties": {}
},
"workbooks": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"sheets"
],
"properties": {
"name": {
"type": "string",
"description": "Workbook name. Pass it as `workbook_name` here or to export_document."
},
"sheets": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"row_count",
"column_count",
"rows",
"omitted_rows"
],
"properties": {
"name": {
"type": "string",
"description": "Sheet name. Pass it as `sheet_name` to read only this sheet."
},
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"row",
"cells"
],
"properties": {
"row": {
"type": "number",
"description": "Row number, starting at 1."
},
"cells": {
"type": "array",
"items": {
"type": "string"
},
"description": "The cells of the row as text, left to right."
}
},
"additionalProperties": {}
},
"description": "The rows returned in this response."
},
"row_count": {
"type": "number",
"description": "Total number of rows in the sheet."
},
"column_count": {
"type": "number",
"description": "Number of columns in the widest row of the sheet."
},
"omitted_rows": {
"type": "number",
"description": "Rows after the returned ones that are not in this response. Read them with a higher `row_start`."
}
},
"additionalProperties": {}
},
"description": "The sheets of the workbook."
}
},
"additionalProperties": {}
},
"description": "Excel workbooks stored in the document. Empty when it has none."
},
"is_running": {
"type": "boolean",
"description": "True while a Slaide run is still working on this document; its content may still change."
},
"page_count": {
"type": "number",
"description": "Number of pages or slides in the whole document, not only the ones returned here."
},
"updated_at": {
"type": "string",
"description": "Time of the last change to the document."
},
"document_id": {
"type": "string",
"description": "Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"available_exports": {
"type": "array",
"items": {
"type": "string"
},
"description": "File types this document can be exported to with export_document."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Read a Slaide document",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this when the user wants a NEW presentation, document or Excel workbook built from a brief, notes or attached files ("make me a deck about X", "turn this report into slides"). Slaide designs it, writes it, can research facts on the web and applies the user's saved brand kit if they have one — you do not need to supply layout, design or slide text, and you should not paste a slide-by-slide outline unless the user gave you one. Put the source material the user gave for THIS document (notes, figures, tables) into `provided_content` instead of summarising it; do not send the rest of the conversation. If the document must contain figures or facts only the user has (their own results, numbers, names) and you do not have them, ask for them first — never invent them. When the user attached files to the chat, pass them as `files`: Slaide reads the originals. The run uses the same account limits as in Slaide. It returns IMMEDIATELY with a job_id — building takes minutes and continues in the background. When the chat shows the user a live progress card for the job, the card follows the job by itself: tell the user in a sentence or two that Slaide is building the document, then stop — do not poll. Without such a card, poll get_job after `poll_after_ms` and keep the user informed. Never call this tool again while a job is running. Do NOT use it to change an EXISTING document (use update_document) or when the user only wants advice or an answer.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
instruction
What to build, in the user's own words. Include audience, purpose and tone if known.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document_type
Kind of document to build: slides, a text document or an Excel workbook. Omit to let the instruction decide.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
title
Title under which the document appears in the user's Slaide library. Omit if the user gave none.
Clear enough to supply this argument.
target_pages
Approximate number of pages or slides the user wants. Omit if they did not ask for a length.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
language
Language the document is written in, as a name such as 'German'. Omit if the user did not ask for one.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
provided_content
Source material the user gave for this document: notes, figures, tables. Not the conversation itself.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
source_urls
Public URLs Slaide should research before writing.
Clear enough to supply this argument.
files › items › download_url
Temporary link from which Slaide downloads the attachment. Supplied by the chat host; pass it through unchanged.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
files › items › file_id
The chat host's id for the attachment. Supplied by the host; pass it through unchanged.
Clear enough to supply this argument.
files › items › mime_type
Media type of the file, such as application/pdf, when the host reports one.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
files › items › file_name
Original name of the file, when the host reports one.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
idempotency_key
Reuse the same key if you retry after a lost response, so no second document is created. Without a key, the same request repeated within 24 hours returns the earlier job (marked `deduplicated`); pass a new key only if the user deliberately wants another copy.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the file."
},
"note": {
"type": "string",
"description": "Present only when the file was not read completely; tell the user."
},
"type": {
"type": "string",
"description": "Kind of content Slaide recognised in the file."
}
},
"additionalProperties": {}
},
"description": "Present only when `files` were passed: what Slaide read, one entry per file."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "create_document",
"title": "Create a Slaide document",
"description": "Use this when the user wants a NEW presentation, document or Excel workbook built from a brief, notes or attached files (\"make me a deck about X\", \"turn this report into slides\"). Slaide designs it, writes it, can research facts on the web and applies the user's saved brand kit if they have one — you do not need to supply layout, design or slide text, and you should not paste a slide-by-slide outline unless the user gave you one. Put the source material the user gave for THIS document (notes, figures, tables) into `provided_content` instead of summarising it; do not send the rest of the conversation. If the document must contain figures or facts only the user has (their own results, numbers, names) and you do not have them, ask for them first — never invent them. When the user attached files to the chat, pass them as `files`: Slaide reads the originals. The run uses the same account limits as in Slaide. It returns IMMEDIATELY with a job_id — building takes minutes and continues in the background. When the chat shows the user a live progress card for the job, the card follows the job by itself: tell the user in a sentence or two that Slaide is building the document, then stop — do not poll. Without such a card, poll get_job after `poll_after_ms` and keep the user informed. Never call this tool again while a job is running. Do NOT use it to change an EXISTING document (use update_document) or when the user only wants advice or an answer.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"instruction"
],
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The chat host's id for the attachment. Supplied by the host; pass it through unchanged."
},
"file_name": {
"type": "string",
"maxLength": 255,
"description": "Original name of the file, when the host reports one."
},
"mime_type": {
"type": "string",
"maxLength": 200,
"description": "Media type of the file, such as application/pdf, when the host reports one."
},
"download_url": {
"type": "string",
"maxLength": 4096,
"description": "Temporary link from which Slaide downloads the attachment. Supplied by the chat host; pass it through unchanged."
}
}
},
"maxItems": 3,
"description": "Files the user attached to this chat (PDF, Word, Excel, PowerPoint, images, text or CSV; up to 3). Filled in from the user's attachments — never invent entries. Prefer this over retyping a file into `provided_content`; only when an attachment comes without a `download_url`, put its text into `provided_content` instead."
},
"title": {
"type": "string",
"maxLength": 160,
"description": "Title under which the document appears in the user's Slaide library. Omit if the user gave none."
},
"language": {
"type": "string",
"maxLength": 40,
"description": "Language the document is written in, as a name such as 'German'. Omit if the user did not ask for one."
},
"instruction": {
"type": "string",
"minLength": 1,
"description": "What to build, in the user's own words. Include audience, purpose and tone if known."
},
"source_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10,
"description": "Public URLs Slaide should research before writing."
},
"target_pages": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Approximate number of pages or slides the user wants. Omit if they did not ask for a length."
},
"document_type": {
"enum": [
"presentation",
"document",
"spreadsheet"
],
"type": "string",
"description": "Kind of document to build: slides, a text document or an Excel workbook. Omit to let the instruction decide."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"description": "Reuse the same key if you retry after a lost response, so no second document is created. Without a key, the same request repeated within 24 hours returns the earlier job (marked `deduplicated`); pass a new key only if the user deliberately wants another copy."
},
"provided_content": {
"type": "string",
"maxLength": 40000,
"description": "Source material the user gave for this document: notes, figures, tables. Not the conversation itself."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the file."
},
"note": {
"type": "string",
"description": "Present only when the file was not read completely; tell the user."
},
"type": {
"type": "string",
"description": "Kind of content Slaide recognised in the file."
}
},
"additionalProperties": {}
},
"description": "Present only when `files` were passed: what Slaide read, one entry per file."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Create a Slaide document",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this when the user wants to change an EXISTING Slaide document — update figures, rewrite a section, restyle, add or remove pages. Say precisely what should change and, if it matters, what must stay untouched; Slaide keeps a version history, so changes are reversible in the app. Read the document with get_document first and pass its `version` as `expected_version`: if someone else changed the document meanwhile you get a version_conflict instead of silently overwriting their work — re-read and decide, never just retry with a higher number. The run uses the same account limits as in Slaide. Returns a job_id immediately and works in the background; handle it like create_document (with a live progress card shown to the user, do not poll; otherwise poll get_job). Do NOT use it for a new document (use create_document).
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
document_id
Opaque id of the document to change, taken from search_documents, get_document or a job result.
Clear enough to supply this argument.
instruction
What should change, stated precisely, and what must stay untouched if that matters.
Clear enough to supply this argument.
scope
Narrow the change, e.g. 'page 4' or 'the revenue chart'. Everything else is left alone.
Clear enough to supply this argument.
expected_version
The `version` from your last get_document. If the document changed since, the call fails with version_conflict instead of overwriting. Omitted, the change is applied to whatever the current version is.
Clear enough to supply this argument.
idempotency_key
A key of your choosing; reuse it when you retry after a lost response so the edit is not applied twice. Omitted, the same request against the same document version within 24 hours returns the earlier job (marked `deduplicated`).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "update_document",
"title": "Update a Slaide document",
"description": "Use this when the user wants to change an EXISTING Slaide document — update figures, rewrite a section, restyle, add or remove pages. Say precisely what should change and, if it matters, what must stay untouched; Slaide keeps a version history, so changes are reversible in the app. Read the document with get_document first and pass its `version` as `expected_version`: if someone else changed the document meanwhile you get a version_conflict instead of silently overwriting their work — re-read and decide, never just retry with a higher number. The run uses the same account limits as in Slaide. Returns a job_id immediately and works in the background; handle it like create_document (with a live progress card shown to the user, do not poll; otherwise poll get_job). Do NOT use it for a new document (use create_document).",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id",
"instruction"
],
"properties": {
"scope": {
"type": "string",
"maxLength": 300,
"description": "Narrow the change, e.g. 'page 4' or 'the revenue chart'. Everything else is left alone."
},
"document_id": {
"type": "string",
"maxLength": 100,
"description": "Opaque id of the document to change, taken from search_documents, get_document or a job result."
},
"instruction": {
"type": "string",
"minLength": 1,
"description": "What should change, stated precisely, and what must stay untouched if that matters."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"description": "A key of your choosing; reuse it when you retry after a lost response so the edit is not applied twice. Omitted, the same request against the same document version within 24 hours returns the earlier job (marked `deduplicated`)."
},
"expected_version": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "The `version` from your last get_document. If the document changed since, the call fails with version_conflict instead of overwriting. Omitted, the change is applied to whatever the current version is."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Update a Slaide document",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this to check how a create_document, update_document or export_document job is going, or when the user asks whether it is done — not to wait for a job whose live progress card the user can already see. Wait `poll_after_ms` between calls — building a deck takes minutes and polling faster tells you nothing new. Status is one of queued, running, completed, partial, failed, cancelled. When it is completed, the result carries the title, the page count and (for an export) a private download link that expires after 15 minutes. If the result has a `note`, pass it on to the user in your own words. 'partial' means Slaide produced something but not everything — the document is usable and the user can finish it in Slaide.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
job_id
The `job_id` returned by create_document, update_document or export_document.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"kind",
"status",
"document_id",
"app_url"
],
"properties": {
"kind": {
"type": "string",
"description": "What the job does: create, update or export."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"description": "Machine-readable error class."
},
"message": {
"type": "string",
"description": "What went wrong, in plain words."
}
},
"description": "Present when the job failed.",
"additionalProperties": {}
},
"stage": {
"type": "string",
"description": "Short machine-readable name of the current step."
},
"job_id": {
"type": "string",
"description": "The job this status belongs to."
},
"result": {
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "Something the user should know about this result; pass it on in your own words."
},
"title": {
"type": "string",
"description": "Title of the document."
},
"summary": {
"type": "string",
"description": "Slaide's short summary of what it did."
},
"expires_at": {
"type": "string",
"description": "Time at which `download_url` stops working."
},
"page_count": {
"type": "number",
"description": "Number of pages that were built."
},
"download_url": {
"type": "string",
"description": "Export jobs only: private link to the finished file. Give it to the user."
},
"planned_page_count": {
"type": "number",
"description": "Present only when more pages were planned than built: the planned total."
}
},
"description": "Present once the job has produced a result.",
"additionalProperties": {}
},
"status": {
"type": "string",
"description": "queued, running, completed, partial, failed or cancelled. `partial` means some but not all of the work was produced."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"progress": {
"type": "string",
"description": "The current step as an English sentence you can relay to the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"poll_after_ms": {
"type": "number",
"description": "Present while the job is queued or running: milliseconds to wait before the next get_job call."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "get_job",
"title": "Check a Slaide job",
"description": "Use this to check how a create_document, update_document or export_document job is going, or when the user asks whether it is done — not to wait for a job whose live progress card the user can already see. Wait `poll_after_ms` between calls — building a deck takes minutes and polling faster tells you nothing new. Status is one of queued, running, completed, partial, failed, cancelled. When it is completed, the result carries the title, the page count and (for an export) a private download link that expires after 15 minutes. If the result has a `note`, pass it on to the user in your own words. 'partial' means Slaide produced something but not everything — the document is usable and the user can finish it in Slaide.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 100,
"description": "The `job_id` returned by create_document, update_document or export_document."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"kind",
"status",
"document_id",
"app_url"
],
"properties": {
"kind": {
"type": "string",
"description": "What the job does: create, update or export."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string",
"description": "Machine-readable error class."
},
"message": {
"type": "string",
"description": "What went wrong, in plain words."
}
},
"description": "Present when the job failed.",
"additionalProperties": {}
},
"stage": {
"type": "string",
"description": "Short machine-readable name of the current step."
},
"job_id": {
"type": "string",
"description": "The job this status belongs to."
},
"result": {
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "Something the user should know about this result; pass it on in your own words."
},
"title": {
"type": "string",
"description": "Title of the document."
},
"summary": {
"type": "string",
"description": "Slaide's short summary of what it did."
},
"expires_at": {
"type": "string",
"description": "Time at which `download_url` stops working."
},
"page_count": {
"type": "number",
"description": "Number of pages that were built."
},
"download_url": {
"type": "string",
"description": "Export jobs only: private link to the finished file. Give it to the user."
},
"planned_page_count": {
"type": "number",
"description": "Present only when more pages were planned than built: the planned total."
}
},
"description": "Present once the job has produced a result.",
"additionalProperties": {}
},
"status": {
"type": "string",
"description": "queued, running, completed, partial, failed or cancelled. `partial` means some but not all of the work was produced."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"progress": {
"type": "string",
"description": "The current step as an English sentence you can relay to the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"poll_after_ms": {
"type": "number",
"description": "Present while the job is queued or running: milliseconds to wait before the next get_job call."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Check a Slaide job",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Use this when the user asks for a file, a download, or 'the PowerPoint': it turns a document into a real file — pptx (editable PowerPoint), pdf, docx, png or xlsx (Excel workbook). An imported deck may preserve eligible original slides; an attached company template is used when the document fits it. Rendering takes up to a few minutes, so this returns a job_id. When the chat shows the user a live progress card for the job, the card follows it by itself and offers the download when the file is ready: say in a sentence that the file is being prepared, then stop — do not poll. Without such a card, poll get_job after `poll_after_ms` and, when it completes, hand the user the download link from the result. The link is private and expires after 15 minutes; it does not make the document public. Check `available_exports` from get_document if you are unsure a format is supported.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document_id
Opaque id of the document to export, taken from search_documents, get_document or a job result.
Clear enough to supply this argument.
format
The file type the user asked for. Not every document supports every type; `available_exports` from get_document lists the ones this document supports.
Clear enough to supply this argument.
workbook_name
Which workbook to export as xlsx when the document holds several. Use a `name` from `workbooks` in get_document. Not needed otherwise.
Clear enough to supply this argument.
idempotency_key
A key of your choosing; reuse it when you retry after a lost response. Omitted, the same export of the same document version within 24 hours returns the earlier job instead of rendering again.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "export_document",
"title": "Export a Slaide document",
"description": "Use this when the user asks for a file, a download, or 'the PowerPoint': it turns a document into a real file — pptx (editable PowerPoint), pdf, docx, png or xlsx (Excel workbook). An imported deck may preserve eligible original slides; an attached company template is used when the document fits it. Rendering takes up to a few minutes, so this returns a job_id. When the chat shows the user a live progress card for the job, the card follows it by itself and offers the download when the file is ready: say in a sentence that the file is being prepared, then stop — do not poll. Without such a card, poll get_job after `poll_after_ms` and, when it completes, hand the user the download link from the result. The link is private and expires after 15 minutes; it does not make the document public. Check `available_exports` from get_document if you are unsure a format is supported.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document_id",
"format"
],
"properties": {
"format": {
"enum": [
"pptx",
"pdf",
"docx",
"png",
"xlsx"
],
"type": "string",
"description": "The file type the user asked for. Not every document supports every type; `available_exports` from get_document lists the ones this document supports."
},
"document_id": {
"type": "string",
"maxLength": 100,
"description": "Opaque id of the document to export, taken from search_documents, get_document or a job result."
},
"workbook_name": {
"type": "string",
"maxLength": 160,
"description": "Which workbook to export as xlsx when the document holds several. Use a `name` from `workbooks` in get_document. Not needed otherwise."
},
"idempotency_key": {
"type": "string",
"maxLength": 200,
"description": "A key of your choosing; reuse it when you retry after a lost response. Omitted, the same export of the same document version within 24 hours returns the earlier job instead of rendering again."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"document_id",
"status",
"app_url",
"poll_after_ms"
],
"properties": {
"note": {
"type": "string",
"description": "Present only when there is something to tell the user about this build; pass it on in your own words."
},
"job_id": {
"type": "string",
"description": "Handle of the background job. Pass it to get_job or cancel_job."
},
"status": {
"type": "string",
"description": "State of the job when this response was sent: queued, running, completed, partial, failed or cancelled."
},
"app_url": {
"type": "string",
"description": "Link that opens the document in the Slaide web app. Share it with the user."
},
"document_id": {
"type": "string",
"description": "The document the job works on. Opaque id of the document. Pass it to get_document, update_document or export_document."
},
"deduplicated": {
"type": "boolean",
"description": "True when this request matched an earlier one and that earlier job is returned instead of a new one."
},
"poll_after_ms": {
"type": "number",
"description": "Milliseconds to wait before the first get_job call."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Export a Slaide document",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Use this only when the user asks you to stop a running Slaide job, or when they want to start something different on the same document and the current run is in the way. Pages Slaide already wrote are kept and the unused run reservation is released — but the run does not resume, so the document may be left half-finished. A job that already finished is returned unchanged.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
job_id
The `job_id` of the job to stop, as returned by create_document, update_document or export_document.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"status"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job that was asked to stop."
},
"status": {
"type": "string",
"description": "State of the job after this call: cancelled when a running job was stopped, otherwise its unchanged state."
}
},
"additionalProperties": {}
}
Original tool metadata
{
"name": "cancel_job",
"title": "Cancel a Slaide job",
"description": "Use this only when the user asks you to stop a running Slaide job, or when they want to start something different on the same document and the current run is in the way. Pages Slaide already wrote are kept and the unused run reservation is released — but the run does not resume, so the document may be left half-finished. A job that already finished is returned unchanged.",
"inputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"maxLength": 100,
"description": "The `job_id` of the job to stop, as returned by create_document, update_document or export_document."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id",
"status"
],
"properties": {
"job_id": {
"type": "string",
"description": "The job that was asked to stop."
},
"status": {
"type": "string",
"description": "State of the job after this call: cancelled when a running job was stopped, otherwise its unchanged state."
}
},
"additionalProperties": {}
},
"annotations": {
"title": "Cancel a Slaide job",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Search Slaide documentsUse this when the user refers to an existing presentation or document in their own Slaide library — by name, topic or recency ("my Project Alpha deck", "the…
02Read a Slaide documentUse this when you need to see what is in one of the user's own Slaide documents: its title, format, page-by-page content, speaker notes, Excel workbook sheet…
03Check a Slaide jobUse this to check how a create_document, update_document or export_document job is going, or when the user asks whether it is done — not to wait for a job wh…
Want to run these tasks against your MCP server with us?
Slaide setup, tools, quality score, publishing readiness, and alternatives.
How do I add Slaide to Claude, ChatGPT, or Cursor?
Add Slaide to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://app.slaide.de/api/mcp.
Is Slaide MCP ready for ChatGPT and Claude?
As of November 10, 2026, Slaide scores 97/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Slaide's MCP tool documentation?
As of November 10, 2026, Slaide scores 96/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 7 of 7 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Slaide?
As of November 10, 2026, alternatives to Slaide in design-creative on the Manufact MCP leaderboard include Dayfaro, Vectorize: logo to SVG, MotionVid, Reel Breakdown, and VideoGen.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.