Discover
Call server/discover or tools/list to see the current protocol, capability, schema, and cache lifetime.
Expose a narrow Emelyn tool with a clear schema, workspace-level access, structured results, and a confirmation step before anything is created.

Your AI client can inspect the tool, validate a source, and return a campaign preview. Creating or publishing remains a separate, visible decision.
Call server/discover or tools/list to see the current protocol, capability, schema, and cache lifetime.
Call create_campaign_preview with one workspace, one approved source URL, and explicit channels.
Show the inputs and resulting drafts. A person can confirm or reject the campaign creation.
Publishing permissions are not bundled into this preview scope. Use the normal Emelyn approval workflow.
List the tool first, validate every argument on the server, and return a structured preview. Do not rely on the model to remember a hidden workspace or an earlier connection.
tools/list entry
{
"name": "create_campaign_preview",
"description": "Preview a campaign from an approved source URL.",
"inputSchema": {
"type": "object",
"required": ["workspace_id", "source_url", "channels"],
"properties": {
"workspace_id": { "type": "string" },
"source_url": { "type": "string", "format": "uri" },
"channels": {
"type": "array",
"items": { "enum": ["linkedin", "instagram", "threads", "x"] }
},
"review_required": { "const": true }
}
}
}tools/call request
POST /mcp
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: create_campaign_preview
Authorization: Bearer <access-token>
{
"jsonrpc": "2.0",
"id": "campaign-01",
"method": "tools/call",
"params": {
"name": "create_campaign_preview",
"arguments": {
"workspace_id": "wk_7f9a2c3b",
"source_url": "https://example.com/release",
"channels": ["linkedin", "threads"],
"review_required": true
}
}
}MCP connector revision 1.0 · Protocol 2026-07-28 · Last tested 29 August 2026.
Plain text explains the result. structuredContent carries the preview ID, source, channels, and draft summaries against a declared output schema.
| Input or result | Use | Check |
|---|---|---|
| workspace_id | Permission boundary | The token must be allowed to access this exact workspace. |
| source_url | Campaign evidence | Emelyn fetches the approved page and keeps its URL attached. |
| channels | Draft targets | Only these channel formats appear in the preview. |
| review_required | Creation control | Fixed to true for this tool. |
| result.structuredContent.preview_id | Stable preview | Lets the client show or confirm the same result. |
isError: true explains an invalid URL, unavailable source, or unsupported channel so the client can correct the input.
Unknown tools, malformed JSON-RPC, and unsupported protocol versions return protocol errors. Repeating the same request will not help.
Use HTTPS and OAuth for remote clients, bind the token to the Emelyn MCP resource, and request the smallest scope needed for the tool being called.
Grant campaigns:preview for one user and allowed workspaces.
Display source URL, workspace, channels, and the tool name before the call.
Show the draft preview and the evidence it came from.
Create only after an explicit choice. Publishing is still governed in Emelyn.
No token passthroughThe Emelyn token is accepted only by the Emelyn MCP server, never forwarded to another API.
Inputs are untrustedURLs, channel names, and IDs are validated server-side and checked against the caller’s access.
Operational limitsCalls have timeouts, per-user rate limits, audit records, and bounded response sizes. A timeout may be retried with the same request ID.
The page uses the current sessionless request model, separates tool execution errors from protocol errors, and follows the MCP guidance for access control, rate limiting, input validation, audit logs, and human confirmation.