Koskamo

Trickl MCP

An official MCP server provided by Trickl that enables AI coding assistants to integrate with the Trickl platform. It provides developers with step-by-step setup plans, full documentation, and sandbox tools to execute test purchases end-to-end, allowing agents to verify their integration work automatically.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Trickl MCP logo, by TricklVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Trickl
MCP endpoint (Streamable HTTP)
https://api.trickl.app/mcp/dev
Vendor documentation

What you can do with it

  • Connect AI coding assistants like Claude or Cursor to Trickl
  • Run test purchases end-to-end using sandbox tools
  • Access full documentation and setup plans for integration
  • Verify integration work automatically via agent checks

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
trickl-dev 1.0.0
MCP protocol
2025-06-18
Tools
10 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Trickl developer tools. Call get_started first to pick an integration path and get a step-by-step plan, then write the integration in the user's codebase. search_docs / read_doc hold the full reference. With a test key on the connector, the sandbox tools (check_api_key, register_test_provider, create_test_goal, simulate_goal_event, cancel_test_goal, list_webhook_deliveries) prove the integration end to end without real money. Never put an API key in client-side code or a commit; it belongs in the user's server env.

Tools

10 advertised

get_started — Get a Trickl setup plan
Advertised by the server during the last successful anonymous check.
Advertised read-only

Start here. Without an integration, explains the ways to add Trickl (own business such as a SaaS, or a multi-seller platform) and how to choose. With one, returns a step-by-step plan for the coding agent: keys, exact API calls, webhook handling, what to store, and how to prove it works with this server's sandbox tools.

get_started input schema
{
  "type": "object",
  "properties": {
    "integration": {
      "enum": [
        "embed_widget",
        "own_embedded_checkout",
        "own_hosted_checkout",
        "platform_embedded_checkout",
        "platform_hosted_checkout"
      ],
      "type": "string",
      "description": "own_*: the user's own business gets paid (SaaS, app, course, membership); own_embedded_checkout puts checkout inside their app. platform_*: many sellers on the user's platform get paid. embedded = in-page iframe, hosted = redirect to Trickl. embed_widget: paste-in pricing widget, no backend. Omit to see the choices."
    }
  },
  "additionalProperties": false
}
get_started annotations
{
  "readOnlyHint": true
}
search_docs — Search the Trickl docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Keyword search over the Trickl partner docs (platform API, webhooks, embed widget). Returns section ids with snippets; read one with read_doc. Leave query empty for the full table of contents.

search_docs input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "e.g. \"deadline goal\", \"verify signature\", \"REDIRECT_URL_NOT_ALLOWED\""
    }
  },
  "additionalProperties": false
}
search_docs annotations
{
  "readOnlyHint": true
}
read_doc — Read a docs section
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns one section of the Trickl docs in full (Markdown), by id from search_docs.

read_doc input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Section id, e.g. \"platform-api/sandbox-test-mode\""
    }
  },
  "additionalProperties": false
}
read_doc annotations
{
  "readOnlyHint": true
}
check_api_key — Check the API key
Advertised by the server during the last successful anonymous check.
Advertised read-only

Confirms this connector's test key works and shows its platform, scopes and mode. Run it before the other sandbox tools; if it fails, the message says what the user needs to fix.

check_api_key input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
check_api_key annotations
{
  "readOnlyHint": true
}
register_test_provider — Register a sandbox seller
Advertised by the server during the last successful anonymous check.

Registers a seller (provider) under the test key via POST /providers/register and returns providerLinkCode (needed to create goals) and webhookSecret (to verify webhooks). Idempotent on externalCreatorId. webhookUrl must be a public https URL that reaches the user's receiver, e.g. an ngrok or cloudflared tunnel to localhost. Sandbox webhooks are real signed HTTP requests.

register_test_provider input schema
{
  "type": "object",
  "required": [
    "webhookUrl"
  ],
  "properties": {
    "email": {
      "type": "string",
      "description": "Must not belong to an existing Trickl provider. Default: a per-seller @example.com address"
    },
    "webhookUrl": {
      "type": "string",
      "description": "https URL of the user's webhook receiver"
    },
    "websiteUrl": {
      "type": "string",
      "description": "Seller site; its host is allowed for redirects and embedded checkout"
    },
    "businessName": {
      "type": "string",
      "description": "Default: Sandbox Seller"
    },
    "externalCreatorId": {
      "type": "string",
      "description": "The seller's id in the user's app. Default: sandbox-seller-1"
    },
    "stripeConnectAccountId": {
      "type": "string",
      "description": "Leave empty in sandbox: a placeholder is used, since sandbox goals never reach Stripe"
    }
  },
  "additionalProperties": false
}
register_test_provider annotations
{
  "readOnlyHint": false
}
create_test_goal — Create a sandbox goal
Advertised by the server during the last successful anonymous check.

Creates a goal with POST /goals/create using the test key. No money moves. Returns goalId, paymentUrl (hosted checkout) and clientSecret (embedded checkout). Amounts are integer cents, USD.

create_test_goal input schema
{
  "type": "object",
  "required": [
    "providerLinkCode",
    "targetAmount",
    "description"
  ],
  "properties": {
    "deadline": {
      "type": "string",
      "description": "ISO 8601 due date, 24h to 2 years out (one-time goals only)"
    },
    "imageUrl": {
      "type": "string"
    },
    "metadata": {
      "type": "object",
      "description": "Echoed verbatim in every webhook, e.g. { orderId }",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "cancelUrl": {
      "type": "string"
    },
    "frequency": {
      "enum": [
        "WEEKLY",
        "BIWEEKLY",
        "MONTHLY",
        "QUARTERLY",
        "YEARLY"
      ],
      "type": "string",
      "description": "Makes it a recurring subscription; omit for a one-time purchase"
    },
    "callbackUrl": {
      "type": "string",
      "description": "Where the buyer returns after confirming; localhost is allowed in test mode"
    },
    "description": {
      "type": "string",
      "description": "What the buyer is saving for, max 500 characters"
    },
    "targetAmount": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 50,
      "description": "Price in cents, e.g. 2999 = $29.99"
    },
    "depositAmount": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Upfront card charge in cents. One-time: ≥ 50 and < targetAmount. Subscription: = targetAmount or omit"
    },
    "providerLinkCode": {
      "type": "string",
      "description": "From register_test_provider"
    },
    "depositRefundable": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
create_test_goal annotations
{
  "readOnlyHint": false
}
get_goal — Get a sandbox goal
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns a sandbox goal's current state via GET /goals/:goalId: status, amounts saved, buyer, deadline.

get_goal input schema
{
  "type": "object",
  "required": [
    "goalId"
  ],
  "properties": {
    "goalId": {
      "type": "string",
      "description": "goalId from create_test_goal"
    }
  },
  "additionalProperties": false
}
get_goal annotations
{
  "readOnlyHint": true
}
simulate_goal_event — Simulate a goal event
Advertised by the server during the last successful anonymous check.

Moves a sandbox goal through its lifecycle instantly; each event sends the real signed webhook to the seller's webhookUrl, exactly as live would. confirm: the buyer signs up and links a bank (goal.deposit_paid if there is a deposit; for subscriptions also goal.subscription_created, plus goal.cycle_paid at once if the deposit paid the first period in full). collect: one round-up chunk, $3 by default (goal.round_up_collected); fails with ALREADY_FUNDED when the current period is already paid. complete: one-time goals finish (goal.completed); subscriptions pay the current period and start the next (goal.cycle_paid; the goal stays SAVING). payment_failed: a failed chunk (goal.payment_failed), with reversal=true for the clawback path. expire: a deadline goal fell short (goal.deadline_charge_failed). Confirm first.

simulate_goal_event input schema
{
  "type": "object",
  "required": [
    "goalId",
    "event"
  ],
  "properties": {
    "event": {
      "enum": [
        "confirm",
        "collect",
        "complete",
        "payment_failed",
        "expire"
      ],
      "type": "string"
    },
    "amount": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "collect / payment_failed only: cents, default 300",
      "exclusiveMinimum": 0
    },
    "goalId": {
      "type": "string",
      "description": "goalId from create_test_goal"
    },
    "reason": {
      "enum": [
        "ach_return",
        "dispute"
      ],
      "type": "string",
      "description": "payment_failed with reversal only"
    },
    "reversal": {
      "type": "boolean",
      "description": "payment_failed only: true = a chunk already counted is reversed (clawback); false = a collection failed"
    }
  },
  "additionalProperties": false
}
simulate_goal_event annotations
{
  "readOnlyHint": false
}
cancel_test_goal — Cancel a sandbox goal
Advertised by the server during the last successful anonymous check.

Cancels a sandbox goal via POST /goals/:goalId/cancel, as the user's server would when a customer cancels: collected chunks (and a refundable deposit) are refunded less Trickl's fee, in the ledger only, and goal.cancelled is sent.

cancel_test_goal input schema
{
  "type": "object",
  "required": [
    "goalId"
  ],
  "properties": {
    "goalId": {
      "type": "string",
      "description": "goalId from create_test_goal"
    }
  },
  "additionalProperties": false
}
cancel_test_goal annotations
{
  "readOnlyHint": false
}
list_webhook_deliveries — List webhook deliveries
Advertised by the server during the last successful anonymous check.
Advertised read-only

Shows every webhook Trickl sent for a sandbox goal, newest first, with its payload and the receiver's result. DELIVERED = got a 2xx. FAILED = rejected, retry scheduled at nextRetryAt. EXHAUSTED = gave up. PENDING / DELIVERING = in flight; check again in a few seconds. Use lastStatusCode and lastError to debug the receiver.

list_webhook_deliveries input schema
{
  "type": "object",
  "required": [
    "goalId"
  ],
  "properties": {
    "goalId": {
      "type": "string",
      "description": "goalId from create_test_goal"
    }
  },
  "additionalProperties": false
}
list_webhook_deliveries annotations
{
  "readOnlyHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
905 ms
95th percentile latency
905 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 905 ms · metadata changed · 10 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http trickl-mcp https://api.trickl.app/mcp/dev

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add trickl-mcp --url https://api.trickl.app/mcp/dev

Cursor

Merge this server into .cursor/mcp.json in your project, then enable trickl-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "trickl-mcp": {
      "url": "https://api.trickl.app/mcp/dev"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "trickl-mcp": {
      "type": "streamableHttp",
      "url": "https://api.trickl.app/mcp/dev",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start trickl-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "trickl-mcp": {
      "type": "http",
      "url": "https://api.trickl.app/mcp/dev"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http trickl-mcp https://api.trickl.app/mcp/dev

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "trickl-mcp": {
      "url": "https://api.trickl.app/mcp/dev"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "trickl-mcp": {
      "serverUrl": "https://api.trickl.app/mcp/dev"
    }
  }
}

Let your agent find its tools

Find servers like Trickl MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Trickl MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing