MCP Use Cases
Diese Workflows zeigen, wie ein KI-Agent Copera-MCP-Tools verkettet, um echte Arbeit zu erledigen. Weil der Server zustandslos ist, braucht jedes Board-/Tabellen-/Zeilen-Tool explizite Hex-ObjectIds — die meisten Flows starten daher mit Discovery (list_boards → list_tables → get_table_schema), bevor gelesen oder geschrieben wird.
Jedes Beispiel zeigt die Tool-Aufrufe in Reihenfolge mit den Schlüsselargumenten. Tool-Ergebnisse sind JSON; der Agent liest IDs und Werte aus einem Ergebnis, um den nächsten Aufruf zu füttern.
Board finden und Zeilen lesen
Das häufigste Muster: Board nach Namen finden, Tabelle finden, dann Zeilen lesen.
list_boards({ query: "Roadmap" })
// → [{ id: "66ab…b01", name: "Q3 Roadmap", … }]
list_tables({ boardId: "66ab…b01", query: "Features" })
// → [{ id: "66ab…t02", name: "Features", columns: [...] }]
get_table_schema({ boardId: "66ab…b01", tableId: "66ab…t02" })
// → column ids + STATUS/DROPDOWN option ids
list_rows({ boardId: "66ab…b01", tableId: "66ab…t02", sort: "66ab…date:desc" })
// → rows with cell values keyed by columnId
list_rows ist nicht paginiert und kann groß sein. engt mit query, einem strukturierten filter ({ match, conditions: [{ column_id, operator, value }] }) und sort ein, statt jede Zeile zu lesen.
Status einer Zeile aktualisieren
Zuerst das Schema lesen ist erforderlich, damit Sie die echte columnId und eine gültige Options-ID verwenden.
get_table_schema({ boardId, tableId })
// find the STATUS column id and the "Done" option id
update_row({
boardId,
tableId,
rowId: "66ab…r07",
columns: [{ columnId: "66ab…status", value: "66ab…doneOption" }],
})
Um die Langtext-Beschreibung einer Zeile oder eine RICH-TEXT-Spaltenzelle zu bearbeiten, nutzen Sie set_row_markdown — update_row berührt keinen Langtext. Markdown-Writes werden in die Queue gestellt (HTTP 202); erneut mit get_row_markdown lesen, um zu bestätigen.
Docs suchen und zusammenfassen
Das relevanteste Dokument zu einem Keyword holen, seinen Body laden und vom Modell zusammenfassen lassen.
search_docs({ query: "onboarding checklist", limit: 5 })
// → ranked hits with highlights showing what matched
get_doc_content({ docId: "66ab…d11" })
// → full markdown body (can be large — only fetch when you need it)
Der Agent fasst das zurückgegebene Markdown in seiner eigenen Antwort zusammen. Zum Browsen statt Suchen nutzen Sie get_docs_tree, um die Hierarchie zu durchlaufen.
Zusammenfassung in ein neues Doc zurückschreiben
Lesen mit Schreiben kombinieren — über den Workspace recherchieren, dann das Ergebnis persistieren.
search({ query: "Q3 launch", types: ["document", "channelMessage"], limit: 20 })
// gather context across docs and chat
create_doc({ title: "Q3 Launch Summary", content: "# Summary\n\n…" })
// → { id: "66ab…d99" }
// append more later (async — re-read to confirm)
set_doc_content({ docId: "66ab…d99", content: "\n\n## Risks\n…", operation: "append" })
Channel-Nachricht posten
Einen Channel benachrichtigen oder einer bestimmten Person eine DM senden. Geben Sie genau eine von channelId oder userId an.
list_channels({ query: "engineering", type: "text" })
// → [{ id: "66ab…c01", name: "engineering" }]
// or resolve a DM target:
list_workspace_members({ query: "alex@" })
// → [{ id: "66ab…u22", name: "Alex", email: "alex@…" }]
// post to a channel (synchronous)
send_message({ channelId: "66ab…c01", message: "Deploy is green ✅" })
// or direct-message a user (queued, may not appear immediately)
send_message({ userId: "66ab…u22", message: "Can you review the PR?" })
Das optionale name (Display-Name-Override) gilt nur für Channels — bei Direktnachrichten wird es abgelehnt.
Benachrichtigungen triagieren
Inbox lesen, erledigte Items markieren und Rauschen entfernen.
list_notifications()
// → { notifications: [...], unreadCount, count }
update_notification({ notificationId: "66ab…n05", status: "read" })
delete_notification({ notificationId: "66ab…n06" }) // no undo
Paginierung nutzt Notification-ObjectIds als Cursor: übergeben Sie die älteste zurückgegebene ID als after, um durch die Historie zu blättern.
Kommentar an einer Zeile für einen Kunden
Extern sichtbaren Kommentar zu einer Board-Zeile hinzufügen — external bewusst nur verwenden, wenn Personen außerhalb des Workspace es sehen sollen.
list_row_comments({ boardId, tableId, rowId, visibility: "all" })
// review the thread (cursor-paginated via pageInfo.endCursor)
add_row_comment({
boardId,
tableId,
rowId,
content: "We shipped the fix in today's release.",
visibility: "external",
})
View exportieren und im Drive speichern
Tabellen-View in eine Datei rendern. Für PDF/ZIP oder große Exporte bevorzugen Sie saveToDrive: true, damit die Datei im Drive landet statt als Inline-Payload.
// viewId comes from list_tables / get_table_schema
export_table({
boardId,
tableId,
viewId: "66ab…v01",
format: "PDF",
saveToDrive: true,
})
// → async job snapshot + a drive reference
// later, fetch the file
get_drive_download_url({ fileId: "66ab…f44" })
// → presigned CloudFront url (fetch directly, no auth)
Tipps für zuverlässige Agent-Läufe
- Discover before you write. Rufen Sie
get_table_schemaauf, um echtecolumnIds und Options-IDs zu holen, bevorcreate_row/update_row/set_row_markdown— nicht unterstützte Spaltentypen increate_rowwerden still ignoriert. - Nach async Writes erneut lesen.
set_row_markdown,set_doc_contentund Direktnachrichten sind eventually consistent. - Request-Volumen im Rahmen halten. Die API rate-limited;
429s werden automatisch mit Backoff retryt, aber Agenten mit Fan-out können Limits trotzdem treffen. Suchen und Listen mitquery/filter/limiteingrenzen. - Scopes beachten. Ein
403bedeutet fast immer, dass dem Token ein Scope für dieses Tool fehlt — siehe Authentifizierung.
Siehe auch
- Tool-Referenz — jedes Tool, seine Argumente und die Public-API-Fähigkeit, auf die es mappt.
- MCP-Client verbinden — Claude, Cursor oder den MCP Inspector verdrahten.
- API-Referenz — Request-/Response-Schemas der darunterliegenden Endpunkte.