MCP Tools Reference
This page documents the tool families exposed by the Link Platform MCP server. Use OAuth-based connector setup against https://{handle}.mcp.{domain}/mcp, with the shared-host compatibility path on https://ai.10x.in/mcp/{handle}/mcp only as a fallback when needed.
Hosted MCP can expose three capability shapes for a handle:
- tools for actions and structured reads
- read-only resources under
tenx://... - reusable prompts that package recommended workflows
This page focuses on tool calls. Use MCP Builder and Hosted Tools when you need the operator-facing browser workflow that reviews tools, resources, and prompts together.
Need the API + Edge + MCP flow in one place? Use Platform-Wide Feature Exploration Lab.
How tool responses work
Every tool returns the same envelope:
{
"content": [{ "type": "text", "text": "<pretty-printed JSON>" }],
"structuredContent": {
/* same data as a plain object */
}
}
On error:
{
"isError": true,
"content": [
{
"type": "text",
"text": "{ \"error\": \"monolith_api_error\", \"status\": 403 ... }"
}
],
"structuredContent": {
"error": "monolith_api_error",
"status": 403,
"body": { "error": "insufficient_scope" }
}
}
For generic or local MCP clients, the handle parameter is optional on tools and falls back to the server's LINK_PLATFORM_DEFAULT_HANDLE (set at session creation time via the subdomain, e.g. hello.mcp.arjun.tv).
For ChatGPT/OpenAI hosted connectors, do not pass handle when the connector is already bound to one handle. One connector now maps to one handle, and the hosted MCP runtime will use that bound handle automatically.
---
Scope quick reference
| Scope | Tools it unlocks |
|---|---|
mcp.connect | Session initialization |
skills.read | tools/list (see all tools) |
links.read | links_list, links_health_check, links_route_preview |
links.write | links_upsert |
pages.read | pages_list, campaign_structure_get, commerce_pages_list, commerce_page_buyers_list, commerce_access_check, commerce_checkout_session_preview |
pages.write | campaign_structure_upsert, campaign_structure_publish, commerce_refund_issue |
site.deployments.read | site_list_deployments, site_preview_deployment, site_release_get_files |
site.deployments.write | site_deploy_inline, site_deploy_multifile, site_release_rollback |
analytics.read | analytics_get, analytics_export |
knowledge.query | knowledge_query, knowledge_topics, knowledge_stats |
context_store.search | context_store_search, context_store_status |
context_store.manage | context_source_sync |
webhooks.read | webhooks_list |
webhooks.write | webhooks_create, webhooks_delete, webhooks_test |
tracking.templates.read | tracking_list_templates |
tracking.templates.write | tracking_upsert_template |
tracking.personalization.read | tracking_list_personalization_rules |
tracking.personalization.write | tracking_upsert_personalization_rule |
routing.context_origins.read | routing_list_context_origins |
routing.context_origins.write | routing_update_context_origins |
system.usage.read | system_usage_meters |
system.audit.read | system_audit_events |
agent.strategy.read | Hosted Strategy Repository retrieval such as strategy_query when that capability is enabled |
The live tool catalog appears in tools/list regardless of scopes. Scope errors only surface when a tool is actually called.
Some handles also expose pack-specific resources and prompts. For example, commerce-enabled handles may expose resources such as tenx://commerce/overview and guided prompts such as refund_triage alongside the tool catalog.
Companion workflow guide:
---
Links
links_list
List all short links for a handle. Returns each link's slug, destination URL, title, enabled status, and health status (OK, BROKEN, or UNREACHABLE).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key (defaults to session handle) |
Example prompt
"List all my links for handle hello."
Response shape
{
"handle": "hello",
"links": [
{
"slug": "pricing",
"destinationUrl": "https://example.com/pricing",
"title": "Pricing page",
"enabled": true,
"position": 1,
"createdAt": "2026-01-10T12:00:00Z"
}
]
}
---
links_upsert
Create a new short link or update an existing one. Provide a slug (the URL path), destinationUrl, and optional title. Use this for quick link creation without form validation — use links_form_submit if you need schema-based validation.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key for generic/local MCP clients. Omit it for ChatGPT handle-bound connectors. |
slug | string | Yes | Link slug (path segment, e.g. pricing) |
payload | object | Yes | Link fields to set (destinationUrl, title, enabled, etc.) |
Example prompt
"Create a link with slug
launchpointing tohttps://example.com/launchfor handle hello."
Response shape
{
"slug": "launch",
"destinationUrl": "https://example.com/launch",
"title": "Launch",
"enabled": true,
"updatedAt": "2026-03-02T09:00:00Z"
}
---
links_health_check
Check if link destination URLs are reachable. Visits each link's destination and reports OK, BROKEN (e.g. 404), or UNREACHABLE.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Optional body — can include slugs array to limit which links are checked |
Example prompt
"Run a health check on all links for hello and tell me which ones are broken."
Response shape
{
"results": [
{ "slug": "pricing", "status": 200, "healthy": true },
{ "slug": "old-page", "status": 404, "healthy": false }
]
}
---
links_route_preview
Preview where a short link would redirect to under specific visitor conditions (country, device, source, campaign). Useful for testing personalization rules without actually clicking the link.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
slug | string | Yes | Link slug |
payload | object | No | Conditions to simulate (e.g. visitor context, device type) |
Example prompt
"Show me where the
pricinglink would redirect a mobile visitor from the US."
Response shape
{
"slug": "pricing",
"resolvedUrl": "https://example.com/pricing-mobile",
"ruleApplied": "mobile-us-variant",
"fallback": false
}
---
Site Management
site_deploy_inline
Deploy one small HTML-only page directly. Best for landing pages and simple sites without separate JS/CSS/image files.
When to use this vs site_deploy_multifile:
- Use
site_deploy_inlinefor one HTML-only page with optional inline<style>tags. Script tags (<script>) and inline event handlers (onclick, etc.) are blocked for security. - Use
site_deploy_multifilefor real websites, routed pages, separate JavaScript/CSS/image files, or edits to an already deployed site.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key (defaults to session handle) |
html | string | Yes | Full HTML content for a single-page deploy |
path | string | No | Optional sub-path for a single-page deploy (e.g. /about) |
activate | boolean | No | If false, creates a draft only. Default: true |
Example prompts
"Deploy this HTML as my landing page." "Publish this one-page HTML promo at
/summer-sale."
Response shape
{
"handle": "hello",
"deploymentId": "dep_abc123",
"status": "ACTIVE",
"liveUrl": "https://hello.10x.in/",
"pageUrls": ["https://hello.10x.in/"],
"activatedAt": "2026-03-02T09:05:00Z",
"previewUrl": "https://..."
}
---
site_deploy_multifile
Deploy a full website with separate HTML, CSS, JS, and image files in a single tool call.
This is the default tool for real websites, routed pages, and edits to an already deployed site.
Use this when the site needs JavaScript files, stylesheets, or images as separate files — unlike site_deploy_inline which only accepts inline HTML without script tags. Use nested index.html files to publish specific public paths. Examples: courses/index.html, store/index.html, and dashboard/index.html publish /courses, /store, and /dashboard. perfume/index.html becomes https://hello.10x.in/perfume.
How it works:
The tool supports two modes depending on whether you provide file content:
Mode 1: Automatic (recommended for AI clients) — Provide content for each file. The MCP server handles everything: creates a draft, uploads all files to storage, and activates the deployment. Returns a live URL. This is the recommended mode for ChatGPT, Claude, and all AI clients.
Mode 2: Manual upload — Omit content from files. The tool returns pre-signed S3 upload URLs. You upload files yourself via HTTP PUT, then activate separately. This mode is for developer scripts, CI/CD pipelines, and binary file deployments.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key (defaults to session handle) |
files | array | Yes | Array of file objects. Must include index.html. See fields below |
activate | boolean | No | Set false to keep as draft after upload. Defaults to true when content is provided |
File object fields:
| Field | Type | Required | Description |
|---|---|---|---|
path | string | Yes | Path relative to site root (e.g. index.html, assets/style.css, about/index.html) |
contentType | string | Yes | MIME type (e.g. text/html, text/css, application/javascript, image/png) |
content | string | No | The actual file content as text. When provided for all files, the tool uploads and activates automatically |
sizeBytes | number | No | Optional file size in bytes (computed from content if omitted) |
Example prompts
"Deploy my website with index.html, styles.css, and app.js" "Create a site with a home page, about page, and contact page with JavaScript interactivity"
Response shape (Mode 1 — automatic, with content)
{
"handle": "hello",
"deploymentId": "dep_xyz789",
"status": "ACTIVE",
"liveUrl": "https://hello.10x.in/",
"pageUrls": ["https://hello.10x.in/", "https://hello.10x.in/about"],
"uploadResults": [
{ "path": "index.html", "status": "uploaded" },
{ "path": "styles.css", "status": "uploaded" },
{ "path": "about/index.html", "status": "uploaded" }
]
}
Response shape (Mode 2 — manual, without content)
{
"handle": "hello",
"deploymentId": "dep_xyz789",
"status": "DRAFT",
"liveUrl": "https://hello.10x.in/",
"pageUrls": ["https://hello.10x.in/", "https://hello.10x.in/about"],
"uploadUrls": [
{
"path": "index.html",
"contentType": "text/html",
"putUrl": "https://s3.amazonaws.com/..."
},
{
"path": "styles.css",
"contentType": "text/css",
"putUrl": "https://s3.amazonaws.com/..."
},
{
"path": "about/index.html",
"contentType": "text/html",
"putUrl": "https://s3.amazonaws.com/..."
}
]
}
Manual activation (Mode 2 only): After uploading files to the pre-signed URLs, activate with:
POST /v2/public/handles/{handle}/site-deployments
Content-Type: application/json
{ "activate": true, "deploymentId": "dep_xyz789" }
Limits:
| Limit | Value |
|---|---|
| Files per deployment | 100 max |
| Single file size | 5 MB max |
| Total deployment size | 25 MB max |
| Upload URL expiry | 15 minutes |
---
site_release_get_files
Read files from the current live release by default, or from a specific release when releaseId is provided.
Use this as the read step before editing a deployed site with AI. The tool returns inline content for editable text files and metadata-only entries for binary assets.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key (defaults to session handle) |
releaseId | string | No | Specific release identifier. If omitted, the current live release is used |
paths | array | No | Optional subset of file paths to read |
Behavior
- Text files such as
index.html,styles.css,app.js,data.json,README.md, andicon.svgreturn inlinecontent - Binary files such as
.png,.jpg,.woff, and.pdfreturn metadata only - If the combined text content would be too large, some files return
contentOmittedReason: "response_too_large"instead of full content
Example prompt
"Read the current live release files for my site so you can edit the hero section."
Response shape
{
"handle": "hello",
"releaseId": "dep_live123",
"isLive": true,
"fileCount": 3,
"files": [
{
"path": "index.html",
"contentType": "text/html",
"sizeBytes": 1824,
"isText": true,
"content": "<!DOCTYPE html>..."
},
{
"path": "assets/app.js",
"contentType": "application/javascript",
"sizeBytes": 624,
"isText": true,
"content": "console.log('hello')"
},
{
"path": "assets/logo.png",
"contentType": "image/png",
"sizeBytes": 20480,
"isText": false
}
]
}
---
site_release_rollback
Restore an older site release so it becomes live again.
Use this when a new site deployment was bad and you want to bring back a previous working version quickly.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key (defaults to session handle) |
releaseId | string | Yes | Release identifier to restore |
Example prompt
"Rollback my site to release
dep_prev_good."
Response shape
{
"handle": "hello",
"releaseId": "dep_prev_good",
"status": "LIVE",
"liveReleaseId": "dep_prev_good",
"rolledBackFromReleaseId": "dep_bad_new"
}
site_list_deployments
List all site deployments for a handle.
In ChatGPT, successful results render a launcher button for the live site URL.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
Example prompt
"List recent deployments for hello."
Response shape
{
"handle": "hello",
"activeDeploymentId": "dep_abc123",
"liveUrl": "https://hello.10x.in/",
"deploymentCount": 2,
"deployments": [
{
"deploymentId": "dep_abc123",
"status": "ACTIVE",
"isActive": true,
"liveUrl": "https://hello.10x.in/",
"createdAt": "2026-03-02T09:05:00Z",
"activatedAt": "2026-03-02T09:05:00Z"
},
{
"deploymentId": "dep_old456",
"status": "INACTIVE",
"createdAt": "2026-02-20T14:00:00Z"
}
]
}
---
site_preview_deployment
Get a signed preview URL for any deployment (active or draft).
In ChatGPT, successful results render launcher buttons for the signed preview URL and the live site URL.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
deploymentId | string | Yes | Deployment ID (e.g. dep_abc123) |
Example prompt
"Give me a preview link for deployment dep_abc123 on handle hello."
Response shape
{
"handle": "hello",
"deploymentId": "dep_abc123",
"liveUrl": "https://hello.10x.in/",
"previewUrl": "https://ai.10x.in/v2/public/preview/activate?token=eyJ...",
"expiresInSec": 900
}
---
pages_list
List creator pages for a handle with an optional status filter.
In ChatGPT, successful results render launcher buttons for the returned public page URLs.
Inputs
| Parameter | Type | Required | Description | ||
|---|---|---|---|---|---|
handle | string | No | Handle key | ||
status | DRAFT \ | PUBLISHED \ | ARCHIVED | No | Filter by page status |
Example prompt
"Show me all published pages for hello."
Response shape
{
"handle": "hello",
"pageCount": 1,
"pages": [
{
"pageSlug": "welcome",
"title": "Welcome",
"status": "PUBLISHED",
"pageUrl": "https://hello.10x.in/welcome"
}
]
}
---
campaign_structure_get
Fetch campaign detail structure for a campaign (CAMPAIGN_DETAIL_V1 pages).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
campaignId | string | Yes | Campaign ID (for example cmp_launch) |
Example prompt
"Fetch the campaign structure for campaign cmp_launch on handle hello."
Response shape
{
"handle": "hello",
"campaignId": "cmp_launch",
"pageSlug": "campaign-launch",
"accessMode": "FREE_WITH_LOGIN",
"status": "PUBLISHED",
"structureType": "CAMPAIGN_DETAIL_V1",
"schemaVersion": 3,
"schemaS3Key": "site-structure/hello/campaigns/cmp_launch/v3.json",
"schema": {
"modules": [{ "id": "hero", "type": "hero_banner" }]
}
}
---
campaign_structure_upsert
Create or update the campaign detail structure page and schema JSON.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
campaignId | string | Yes | Campaign ID |
payload | object | Yes | Request payload; include schema JSON object and page details |
Example prompt
"Upsert campaign structure for cmp_launch with pageSlug campaign-launch and schema modules."
Response shape
{
"ok": true,
"handle": "hello",
"campaignId": "cmp_launch",
"pageSlug": "campaign-launch",
"accessMode": "FREE_WITH_LOGIN",
"status": "DRAFT",
"schemaS3Key": "site-structure/hello/campaigns/cmp_launch/v4.json",
"schemaVersion": 4
}
---
campaign_structure_publish
Publish campaign detail structure page (server enforces FREE_WITH_LOGIN).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
campaignId | string | Yes | Campaign ID |
Example prompt
"Publish campaign structure page for cmp_launch."
Response shape
{
"ok": true,
"handle": "hello",
"campaignId": "cmp_launch",
"pageSlug": "campaign-launch",
"accessMode": "FREE_WITH_LOGIN",
"publishedAt": "2026-03-06T12:00:00.000Z"
}
---
Knowledge And Context Store
knowledge_query
Search manually managed and indexed handle knowledge using natural language. Use this for approved documents, runbooks, policies, and manually authored context.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
query | string | Yes | Natural-language query |
topic | string | No | Optional topic filter |
containerTags | string[] | No | Optional exact container tags, including project tags |
filters | object | No | Optional document/tag/metadata filters |
limit | number | No | Maximum results to return |
context_store_search
Search or list replicated connector records. Use this for read-only connector data when the source/entity status is READY or PREVIEW.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
projectId | string | No | Optional Smartwork project scope |
sourceId | string | No | Optional context source id |
entity | string | No | Optional entity such as pages, documents, code, or records |
query | string | No | Natural-language search. Omit it to list structured records |
filters | object | No | Structured filters over indexed record fields and metadata |
fields | string[] | No | Structured listing fields to return |
sort | object | No | Structured listing sort |
limit | number | No | Maximum records/results |
cursor | string | No | Cursor from a previous structured listing response |
Example prompt
"Check Context Store for project
proj_launchand find repository docs about deployment validation."
Response shape
{
"executionPath": "context_store",
"query": "deployment validation",
"count": 2,
"results": [],
"sourceStatuses": [
{
"sourceId": "repo_docs",
"connectorKey": "github_docs",
"status": "READY",
"lastSyncAt": "2026-05-06T10:00:00Z"
}
]
}
context_store_status
Report Context Store source and entity readiness, counts, cursors, and timestamps.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
context_source_sync
Request an async refresh for a configured Context Store source. Use direct provider calls instead when writes or real-time freshness are required.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
sourceId | string | Yes | Context source id to refresh |
---
Companion API/Edge Surfaces (Function Bindings)
Function binding creation and runtime invocation are API/Edge flows that complement MCP usage.
Create function binding (control-plane)
POST /v2/handles/{handle}/function-bindings
Bindings now declare:
status:ACTIVEorDISABLEDtarget:templateorskillexposure.publicWebandexposure.authenticatedMcpexecution.mode:syncorasynctool.name,tool.description, andinputSchemaconfig: target-specific runtime config
Public Web exposure is limited to template-backed bindings in v1.
Discover enabled bindings (public handle)
GET /v2/public/handles/{handle}/function-bindings
Returns only ACTIVE template-backed bindings exposed on the public Web lane.
Discover authenticated MCP bindings
GET /v2/public/handles/{handle}/function-bindings/mcp
Requires PAT scope mcp.connect plus binding/skill invoke authorization.
Invoke binding runtime (edge)
GET|POST /_edge/fn/{handle}/{bindingKey}
Use this for request-level invocation tests and integration checks.
Invoke authenticated MCP binding
POST /v2/public/handles/{handle}/function-bindings/{bindingKey}/invoke
Returns the normalized sync or async tool envelope used by hosted/compat MCP.
For runnable examples, use Platform-Wide Feature Exploration Lab.
---
Analytics
analytics_get
Get click and conversion analytics. Shows total clicks, conversion rates, and traffic data. Use groupBy='slug' to see per-link stats, or 'country'/'device'/'referrer' for breakdowns. Supports date ranges with fromDay/toDay (YYYY-MM-DD).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
query | object | No | Querystring filters (e.g. { "slug": "pricing", "period": "7d" }) |
Example prompt
"How many clicks did handle hello get in the last 7 days?"
Response shape
{
"handle": "hello",
"period": "7d",
"clicks": 1842,
"conversions": 94,
"conversionRate": 0.051
}
---
analytics_export
Export raw analytics data for reporting or external tools. Returns the full dataset for the specified date range.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
query | object | No | Export filters (date range, slug, etc.) |
---
analytics_campaign_health
Check health signals for a specific campaign — click trends, conversion rates, and anomalies.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Optional discovery context |
---
Tracking
tracking_list_templates
List all tracking integrations (Meta Pixel, Google Tag Manager, GA4, custom webhooks) and their enabled/disabled status.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
Response shape
{
"templates": [
{
"templateKey": "meta_pixel",
"enabled": true,
"config": { "pixelId": "12345" }
},
{
"templateKey": "ga4_event",
"enabled": true,
"config": { "measurementId": "G-XXXX" }
}
]
}
---
tracking_upsert_template
Add or update a tracking integration. Supported types: meta_pixel (Facebook), gtm_event (Google Tag Manager), ga4_event (Google Analytics 4), custom_webhook.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload.templateKey | enum | Yes | One of meta_pixel, gtm_event, ga4_event, custom_webhook |
payload.enabled | boolean | No | Disable the template when false |
payload.config | object | No | Template configuration object. Use eventName for event-driven templates or endpointUrl for custom_webhook |
templateKey must be one of: meta_pixel, gtm_event, ga4_event, custom_webhook. This tool does not accept freeform {{variable}} UTM string templates.
Example prompt
"Add a Meta Pixel with ID 98765 to handle hello."
Working example
{
"handle": "deepak",
"payload": {
"templateKey": "ga4_event",
"enabled": true,
"config": {
"eventName": "ai_masterclass_visit"
}
}
}
---
tracking_list_personalization_rules
List all A/B testing and personalization rules. Shows each rule's conditions (country, device, source), variant, priority, and traffic allocation.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
---
tracking_upsert_personalization_rule
Create or update an A/B testing or personalization rule. Target visitors by country, device, traffic source, campaign, or segment. Each rule has a variant (with required id, optional title/cta/destinationUrl) and optional traffic allocation (0-1). Lower priority numbers run first.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
ruleId | string | Yes | Lowercase rule identifier matching ^[a-z0-9][a-z0-9_-]{1,63}$ |
payload.enabled | boolean | No | Disable the rule when false |
payload.priority | number | No | Lower numbers run first |
payload.when | object | No | Fixed match conditions using sourceIn, campaignIn, countryIn, deviceIn, and segmentIn arrays |
payload.variant.id | string | Yes | Required variant identifier |
payload.variant.title | string | No | Optional personalized title |
payload.variant.cta | string | No | Optional personalized CTA |
payload.variant.destinationUrl | string | No | Optional destination override |
payload.variant.metadata | object | No | Optional arbitrary metadata |
payload.trafficAllocation | number | No | Optional 0-1 traffic allocation |
There are no generic operators such as equals. Matching uses the fixed ...In arrays inside payload.when.
Working example
{
"handle": "deepak",
"ruleId": "ai-masterclass-2026-landing",
"payload": {
"enabled": true,
"priority": 100,
"when": {
"campaignIn": ["ai-masterclass-2026"]
},
"variant": {
"id": "masterclass_variant_a",
"title": "AI Masterclass 2026",
"cta": "Reserve your seat",
"destinationUrl": "https://deepak.10x.in/masterclass"
}
}
}
---
tracking_resolve_context
Resolve a ?ctx= token into its attribution data and variables. No connector token required — public endpoint.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
ctx | string | Yes | The CTX token value from a link URL |
Response shape
{
"attribution": { "source": "newsletter", "campaign": "march-launch" },
"vars": { "variant": "B", "segment": "returning" }
}
---
tracking_write_signal
Write a behavioral signal into the chain for a visitor session.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Signal body (type, sessionId, value, etc.) |
---
tracking_resolve_chain
Evaluate a chain trigger and get the routing decision for a visitor.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Trigger context (chainId, sessionId, signals, etc.) |
---
Routing
routing_list_context_origins
List allowlisted browser origins that can generate CTX tokens.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
---
routing_update_context_origins
Replace the full list of allowlisted browser origins.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | New origins list |
---
routing_read_chain_session
Read a chain session — accumulated signals and current state.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Session reference (chainId, sessionId) |
---
routing_prefetch_decisions
Pre-compute routing decisions for multiple trigger events in a single call.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Array of trigger contexts to pre-evaluate |
---
Webhooks
webhooks_list
List all webhook subscriptions for a handle.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
Response shape
{
"subscriptions": [
{
"subscriptionId": "wh_abc",
"endpointUrl": "https://myserver.com/hook",
"eventTypes": ["link.clicked", "conversion.recorded"],
"enabled": true
}
]
}
---
webhooks_create
Register a new webhook subscription.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload.endpointUrl | string | Yes | Public HTTPS destination URL |
payload.eventTypes | array | No | Optional event list. Omit this field to subscribe to all supported webhook events |
payload.enabled | boolean | No | Disable the subscription when false |
Example prompt
"Create a webhook for handle hello that fires on
link.clickedevents and sends tohttps://myserver.com/hook."
Working example
{
"handle": "deepak",
"payload": {
"endpointUrl": "https://n8n.1to10x.ai/webhook/lead-capture",
"eventTypes": ["lead.captured", "link.clicked"],
"enabled": true
}
}
The destination URL does not need pre-registration in 10x. It must be public HTTPS, resolvable, and outside the blocked private-host list.
Supported event names include link.clicked, deployment.created, deployment.activated, skill.invoked, link.routed, link.context_created, conversion.recorded, personalization.resolved, campaign.created, campaign.health_changed, lead.captured, moderation events, webhook.delivery.terminal_failure, destination-domain events, groupbuy events, scene events, agent events, and QA events.
---
webhooks_delete
Delete a webhook subscription by ID.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
subscriptionId | string | Yes | Webhook subscription ID |
---
webhooks_test
Send a test event to a webhook to verify delivery.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
subscriptionId | string | Yes | Webhook subscription ID |
payload | object | No | Optional test event body |
---
Agent (AI Planning & Execution)
The agent tools follow a lifecycle: discover → strategy → proposal → run.
agent_discover
Run agent discovery to surface marketing signals and opportunities for a handle.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Optional discovery context |
---
agent_generate_strategy
Generate strategy recommendations based on discovery signals.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Strategy generation context |
---
agent_list_proposals
List execution proposals, optionally filtered by status (PENDING, APPROVED, REJECTED, RUNNING, COMPLETED).
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
status | string | No | Status filter |
---
agent_create_proposal
Create an execution proposal from strategy output.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Proposal definition |
---
agent_approve_proposal
Approve a pending proposal so it can be executed.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
proposalId | string | Yes | Proposal ID |
---
agent_reject_proposal
Reject a pending proposal with an optional reason.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
proposalId | string | Yes | Proposal ID |
payload | object | No | Optional rejection reason |
---
agent_start_run
Start execution of an approved proposal.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Run parameters (proposalId, etc.) |
---
agent_get_run_status
Poll the status of a running or completed execution, including step-level details.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
runId | string | Yes | Run ID |
Response shape
{
"runId": "run_xyz",
"status": "RUNNING",
"steps": [
{ "stepId": "s1", "name": "upsert-links", "status": "COMPLETED" },
{ "stepId": "s2", "name": "deploy-site", "status": "RUNNING" }
]
}
---
agent_rollback_run
Rollback a completed run, reverting changes made during execution.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
runId | string | Yes | Run ID |
---
System
system_health
Check if the MCP server is connected and working. Returns ok: true if the platform is reachable, plus a count of links as a health probe.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
Example prompt
"Is the MCP connection healthy for handle hello?"
Response shape
{
"handle": "hello",
"healthy": true,
"links": 12
}
---
system_usage_meters
Check current API usage and rate-limit status. Shows how much of your quota has been used.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Optional filter |
---
system_audit_events
View recent activity log — shows who created links, deployed sites, deleted webhooks, and other actions taken on this handle.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | No | Optional body (limit, cursor, etc.) |
---
Code Runs
code_runtime_list
List configured code runtimes available for a handle.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
---
code_run_submit
Submit a code run with an idempotency key.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
payload | object | Yes | Run definition (runtimeId, code, idempotencyKey, etc.) |
---
code_run_status
Fetch the current status of a submitted code run.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
runId | string | Yes | Run ID |
---
code_run_fetch_output
Fetch inline output or file output metadata for a completed run.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
runId | string | Yes | Run ID |
---
Forms
forms_schema_get
Get the form schema that defines what fields are available when creating links (field names, types, required/optional). Currently supports link_form_v1.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
formId | string | No | Currently only link_form_v1 is supported. Defaults to link_form_v1 |
link_form_v1 is the shipped link-management baseline schema. There is currently no built-in lead-capture baseline form for fields like name, email, phone, or job title.
---
forms_feedback_record
Record feedback about a form submission to improve the form schema over time. Send outcome: 'success' with a usedElements array listing which fields were used.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
formId | string | No | Form identifier (defaults to link_form_v1) |
payload | object | Yes | Feedback body |
---
links_form_submit
Create or update a link with form validation. First fetches the form schema, validates required fields (like destinationUrl), then creates/updates the link. Use this instead of links_upsert when you want schema-validated link creation.
Inputs
| Parameter | Type | Required | Description |
|---|---|---|---|
handle | string | No | Handle key |
formId | string | No | Form identifier (defaults to link_form_v1) |
slug | string | No | Optional slug override |
values | object | No | Form values keyed by canonical field keys |
feedback | boolean | No | When true, records successful feedback after submit |
---
Troubleshooting
| Error | Meaning | Fix |
|---|---|---|
isError: true + status: 401 | Connector grant missing or expired | Re-open connector auth and complete OAuth for the handle |
isError: true + status: 403 + insufficient_scope | Connector grant lacks a required scope | Re-authorize connector with the missing scope |
isError: true + missing_handle | No handle was resolved | Pass handle explicitly or set LINK_PLATFORM_DEFAULT_HANDLE |
isError: true + status: 404 | Resource not found | Verify the slug/ID exists for your handle |
isError: true + status: 429 | Rate limited | Retry after a short backoff |
Related
Updated Jun 19, 2026
