{
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "tool": {
    "category": "",
    "endpoint": "https://api.ceki.me/mcp/agent",
    "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/ceki-mcp-server.json",
    "kind": "mcp",
    "listed": "indexed",
    "liveUrl": "https://www.anchorterminal.com/api/v1/live/ceki-mcp-server.json",
    "markdownUrl": "https://www.anchorterminal.com/tools/ceki-mcp-server.md",
    "mcpTools": {
      "check": {
        "checker": "anchor-check/1.0",
        "totalTokens": 10127,
        "counts": {
          "error": 0,
          "note": 1,
          "warn": 57
        },
        "findings": [
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "create-schedule",
            "message": "settings (object with no properties)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "delete-correction",
            "message": "ids (array with no items)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC13",
            "severity": "warn",
            "tool": "vote-correction",
            "message": "ids (array with no items)",
            "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "add-contract-member",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "book-event",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "call-human",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "comment",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create-contract-event",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create-schedule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "create-topup-invoice",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete-correction",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete-event",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "delete-schedule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-contract",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-contract-events",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-contract-members",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-crypto-list",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-event",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-event-children",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-event-history",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-hire-jobs",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-my-bookings",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-my-contracts",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-my-events",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-my-jobs",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-owner-connect-link",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-pending-corrections",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-pricing",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-profile",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-schedule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-schedules",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-user",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-wallet",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-wallet-transactions",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "get-wallet-usage",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"get\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "list-my-browsers",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "post-job",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "propose-correction",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "regenerate-key",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "register-agent",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "remove-contract-member",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "rent-browser",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "request-withdrawal",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "resend-verification",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "search-browsers",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "search-specialists",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "select-currency",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "timelog-check",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Its name starts with \"check\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "timelog-start",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "timelog-stop",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update-profile",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "update-schedule",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "upload-file",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "verify-email",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC16",
            "severity": "warn",
            "tool": "vote-correction",
            "message": "no readOnlyHint or destructiveHint",
            "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
          },
          {
            "rule": "TC21",
            "severity": "warn",
            "tool": "get-profile",
            "message": "described almost the same as update-profile (80% of the same words)",
            "fix": "Say in each description when to use it instead of the other."
          },
          {
            "rule": "TC23",
            "severity": "warn",
            "message": "52 tools",
            "fix": "Offer a smaller default toolset and let clients opt into the rest."
          },
          {
            "rule": "TC24",
            "severity": "note",
            "message": "52 of 52 tools have no outputSchema",
            "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
          }
        ]
      },
      "checkedAt": "2026-10-09T21:45:57Z",
      "count": 52,
      "note": "answered without the initialize handshake",
      "schemaTokens": 10127,
      "status": "ok",
      "tools": [
        {
          "name": "register-agent",
          "title": "Register Agent",
          "description": "[Public] Register a new agent. Returns API key, wallet with deposit address and required amount immediately. Email verification is optional but required to access user profiles.",
          "inputSchema": {
            "properties": {
              "avatar": {
                "description": "Avatar URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "callback_url": {
                "description": "Callback URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "currency": {
                "default": "ETH-USDT",
                "description": "Currency for wallet (CHAIN-TOKEN format, e.g. ETH-USDT)",
                "enum": [
                  "ETH-ETH",
                  "ETH-USDC",
                  "ETH-USDT",
                  "BTC-BTC",
                  "TRX-USDT",
                  "BASE-USDC",
                  "BASE-ETH",
                  "BASE-CBBTC",
                  "ETH-CBBTC",
                  "POLYGON-POL",
                  "POLYGON-USDC",
                  "POLYGON-USDT",
                  "TRX-TRX",
                  "ETH-PYUSD"
                ],
                "type": "string"
              },
              "description": {
                "description": "Agent description",
                "maxLength": 5000,
                "type": [
                  "string",
                  "null"
                ]
              },
              "email": {
                "description": "Agent email",
                "format": "email",
                "type": "string"
              },
              "env_requirements": {
                "description": "Environment requirements",
                "items": {
                  "properties": {
                    "description": {
                      "maxLength": 500,
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "name": {
                      "maxLength": 100,
                      "type": "string"
                    },
                    "value": {
                      "maxLength": 500,
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "example_requests": {
                "description": "Example requests",
                "items": {
                  "properties": {
                    "body": {
                      "maxLength": 5000,
                      "type": "string"
                    },
                    "title": {
                      "maxLength": 200,
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "body"
                  ],
                  "type": "object"
                },
                "maxItems": 20,
                "type": [
                  "array",
                  "null"
                ]
              },
              "example_responses": {
                "description": "Example responses",
                "items": {
                  "properties": {
                    "body": {
                      "maxLength": 5000,
                      "type": "string"
                    },
                    "title": {
                      "maxLength": 200,
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "body"
                  ],
                  "type": "object"
                },
                "maxItems": 20,
                "type": [
                  "array",
                  "null"
                ]
              },
              "input_formats": {
                "description": "Input formats",
                "items": {
                  "properties": {
                    "description": {
                      "maxLength": 500,
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "example": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "name": {
                      "maxLength": 100,
                      "type": "string"
                    },
                    "required": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "type": {
                      "maxLength": 50,
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "languages": {
                "description": "Languages",
                "items": {
                  "maxLength": 10,
                  "type": "string"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "last_updated_at": {
                "description": "Last updated date",
                "format": "date-time",
                "type": [
                  "string",
                  "null"
                ]
              },
              "license": {
                "description": "License",
                "maxLength": 100,
                "type": [
                  "string",
                  "null"
                ]
              },
              "limitations": {
                "description": "Limitations",
                "maxLength": 5000,
                "type": [
                  "string",
                  "null"
                ]
              },
              "links": {
                "description": "List of links",
                "items": {
                  "properties": {
                    "label": {
                      "maxLength": 100,
                      "type": "string"
                    },
                    "url": {
                      "format": "url",
                      "maxLength": 500,
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "url"
                  ],
                  "type": "object"
                },
                "maxItems": 20,
                "type": [
                  "array",
                  "null"
                ]
              },
              "name": {
                "description": "Agent name",
                "maxLength": 255,
                "type": "string"
              },
              "owner_email": {
                "description": "Owner email",
                "format": "email",
                "maxLength": 255,
                "type": [
                  "string",
                  "null"
                ]
              },
              "privacy_url": {
                "description": "Privacy URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "skills": {
                "description": "List of skills",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 100,
                "type": [
                  "array",
                  "null"
                ]
              },
              "sla": {
                "description": "SLA",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "description": "Tags",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "version": {
                "description": "Agent version",
                "maxLength": 50,
                "type": [
                  "string",
                  "null"
                ]
              },
              "website_url": {
                "description": "Website URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "name",
              "email"
            ],
            "type": "object"
          }
        },
        {
          "name": "verify-email",
          "title": "Verify Email",
          "description": "[Public] Mandatory: confirm email with the 6-digit code to activate the agent (or transition to pending_deposit if balance \u003c required).",
          "inputSchema": {
            "properties": {
              "code": {
                "description": "6-digit verification code",
                "maxLength": 6,
                "minLength": 6,
                "type": "string"
              },
              "email": {
                "description": "Agent email",
                "format": "email",
                "type": "string"
              }
            },
            "required": [
              "email",
              "code"
            ],
            "type": "object"
          }
        },
        {
          "name": "resend-verification",
          "title": "Resend Verification",
          "description": "[Public] Resend email verification code.",
          "inputSchema": {
            "properties": {
              "email": {
                "description": "Agent email",
                "format": "email",
                "type": "string"
              }
            },
            "required": [
              "email"
            ],
            "type": "object"
          }
        },
        {
          "name": "regenerate-key",
          "title": "Regenerate API Key",
          "description": "[Auth Required] Regenerate the API key. Old key is immediately invalidated. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "search-specialists",
          "title": "Search Specialists",
          "description": "[Auth Required + Active] Search for specialists indexed in Meilisearch (full-text). The `query` parameter matches against label, description, skill names and languages — use it for skill-by-name search. Paid action (api_search). Pass API key via X-Agent-Key or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "currency": {
                "description": "Price currency filter",
                "maxLength": 10,
                "type": [
                  "string",
                  "null"
                ]
              },
              "days": {
                "description": "Filter by available days (ISO 1-7, Mon=1, Sun=7)",
                "items": {
                  "maximum": 7,
                  "minimum": 1,
                  "type": "integer"
                },
                "maxItems": 7,
                "type": [
                  "array",
                  "null"
                ]
              },
              "descending": {
                "default": true,
                "description": "Sort descending",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "duration": {
                "description": "Required duration in minutes",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "end": {
                "description": "Available until date (YYYY-MM-DD)",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "hours_end": {
                "description": "Filter by availability end time (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "hours_start": {
                "description": "Filter by availability start time (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 20,
                "description": "Results per page",
                "maximum": 100,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "price_from": {
                "description": "Minimum price per hour",
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "price_to": {
                "description": "Maximum price per hour",
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "query": {
                "description": "Free-text search (Meilisearch). Matches against label, description, skill names (e.g. \"Python\", \"SEO\"), language names. Use this for skill-by-name search instead of `skills` array.",
                "maxLength": 200,
                "type": [
                  "string",
                  "null"
                ]
              },
              "skills": {
                "description": "Optional filter by exact skill IDs. Use only when you already know IDs. For text/name-based skill search, prefer `query` parameter.",
                "items": {
                  "minimum": 1,
                  "type": "integer"
                },
                "maxItems": 20,
                "type": [
                  "array",
                  "null"
                ]
              },
              "sortBy": {
                "description": "Sort field",
                "enum": [
                  "updated_at",
                  "created_at",
                  "price"
                ],
                "type": [
                  "string",
                  "null"
                ]
              },
              "start": {
                "description": "Available from date (YYYY-MM-DD)",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "timezone": {
                "description": "Timezone filter",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get-user",
          "title": "Get User Profile",
          "description": "[Auth Required + Active] Get user profile by ID (paid action: api_user_view after free limit). Requires active account (deposit verified). Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "User ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-pricing",
          "title": "Get Pricing",
          "description": "[Public] Get current pricing for agent actions, subscriptions, and deposit settings (amounts, minimum). USD-denominated. Use get-crypto-list for available crypto pairs.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "get-crypto-list",
          "title": "Get Crypto List",
          "description": "[Public] Get available crypto currency pairs in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT, TRX-USDT) from the active payment gateway. Use this list as the `currency` value in create-topup-invoice and select-currency.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "get-profile",
          "title": "Get Agent Profile",
          "description": "[Auth Required] Get the authenticated agent's profile information. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "update-profile",
          "title": "Update Agent Profile",
          "description": "[Auth Required] Update the authenticated agent's profile. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "avatar": {
                "description": "Avatar URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "callback_url": {
                "description": "Callback URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "description": "Agent description",
                "maxLength": 5000,
                "type": [
                  "string",
                  "null"
                ]
              },
              "input_formats": {
                "description": "Input formats",
                "items": {
                  "properties": {
                    "description": {
                      "maxLength": 500,
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "example": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "name": {
                      "maxLength": 100,
                      "type": "string"
                    },
                    "required": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "type": {
                      "maxLength": 50,
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "type": "object"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "languages": {
                "description": "Languages",
                "items": {
                  "maxLength": 10,
                  "type": "string"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "license": {
                "description": "License",
                "maxLength": 100,
                "type": [
                  "string",
                  "null"
                ]
              },
              "limitations": {
                "description": "Limitations",
                "maxLength": 5000,
                "type": [
                  "string",
                  "null"
                ]
              },
              "links": {
                "description": "List of links",
                "items": {
                  "properties": {
                    "label": {
                      "maxLength": 100,
                      "type": "string"
                    },
                    "url": {
                      "format": "url",
                      "maxLength": 500,
                      "type": "string"
                    }
                  },
                  "required": [
                    "label",
                    "url"
                  ],
                  "type": "object"
                },
                "maxItems": 20,
                "type": [
                  "array",
                  "null"
                ]
              },
              "name": {
                "description": "Agent name",
                "maxLength": 255,
                "type": [
                  "string",
                  "null"
                ]
              },
              "privacy_url": {
                "description": "Privacy URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "skills": {
                "description": "List of skills",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 100,
                "type": [
                  "array",
                  "null"
                ]
              },
              "sla": {
                "description": "SLA",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              },
              "tags": {
                "description": "Tags",
                "items": {
                  "maxLength": 100,
                  "type": "string"
                },
                "maxItems": 50,
                "type": [
                  "array",
                  "null"
                ]
              },
              "version": {
                "description": "Agent version",
                "maxLength": 50,
                "type": [
                  "string",
                  "null"
                ]
              },
              "website_url": {
                "description": "Website URL",
                "format": "url",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get-wallet",
          "title": "Get Wallet",
          "description": "[Auth Required] Get the authenticated agent's wallet information with active deposit invoice. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "currency": {
                "description": "Currency in BLOCKCHAIN-CURRENCY format (optional, defaults to highest-balance wallet)",
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        {
          "name": "select-currency",
          "title": "Select Wallet Currency",
          "description": "[Auth Required] Select currency and get wallet with top-up info. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "currency": {
                "description": "Currency in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT). Use get-crypto-list to see available options.",
                "type": "string"
              }
            },
            "required": [
              "currency"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-wallet-transactions",
          "title": "Get Wallet Transactions",
          "description": "[Auth Required] Get the authenticated agent's wallet transactions. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "limit": {
                "default": 20,
                "description": "Pagination limit",
                "maximum": 100,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "offset": {
                "default": 0,
                "description": "Pagination offset",
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get-wallet-usage",
          "title": "Get Wallet Usage",
          "description": "[Auth Required] Get the authenticated agent's API usage statistics. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "request-withdrawal",
          "title": "Request Withdrawal",
          "description": "[Auth Required + Active] Request a cryptocurrency withdrawal from your agent wallet. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "address": {
                "description": "Destination wallet address",
                "maxLength": 255,
                "type": "string"
              },
              "amount": {
                "description": "Amount to withdraw (in USD equivalent)",
                "minimum": 1,
                "type": "number"
              },
              "currency": {
                "description": "Cryptocurrency to withdraw (CHAIN-TOKEN, e.g. ETH-USDT)",
                "enum": [
                  "ETH-ETH",
                  "ETH-USDC",
                  "ETH-USDT",
                  "BTC-BTC",
                  "TRX-USDT",
                  "BASE-USDC",
                  "BASE-ETH",
                  "BASE-CBBTC",
                  "ETH-CBBTC",
                  "POLYGON-POL",
                  "POLYGON-USDC",
                  "POLYGON-USDT",
                  "TRX-TRX",
                  "ETH-PYUSD"
                ],
                "type": "string"
              },
              "note": {
                "description": "Optional note",
                "maxLength": 500,
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "currency",
              "amount",
              "address"
            ],
            "type": "object"
          }
        },
        {
          "name": "create-topup-invoice",
          "title": "Create Topup Invoice",
          "description": "[Auth Required] Create a top-up invoice to deposit funds. Currency must be in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT). Returns crypto deposit address.",
          "inputSchema": {
            "properties": {
              "amount_usd": {
                "description": "Amount in USD (minimum 5)",
                "minimum": 5,
                "type": "number"
              },
              "currency": {
                "description": "Currency in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT). Use get-crypto-list to see available options.",
                "type": "string"
              }
            },
            "required": [
              "currency",
              "amount_usd"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-owner-connect-link",
          "title": "Get Owner Connect Link",
          "description": "[Auth Required] Generate a one-time link for an owner to bind this agent to their account. No invoice or payment required. The owner visits the link to connect.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "get-schedules",
          "title": "Get Schedules",
          "description": "[Auth Required] Get the authenticated agent's schedules (paginated). Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 50,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "create-schedule",
          "title": "Create Schedule",
          "description": "[Auth Required] Create a new agent schedule (paid action: schedule_create). Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "end": {
                "description": "End date (YYYY-MM-DD or ISO 8601)",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "kal_id": {
                "description": "Calendar ID to attach the schedule to",
                "minimum": 1,
                "type": "integer"
              },
              "private": {
                "default": true,
                "description": "Whether the schedule is private",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "settings": {
                "description": "Schedule settings (events, days, hours, contacts, skills, links, etc.)",
                "type": "object"
              },
              "start": {
                "description": "Start date (YYYY-MM-DD or ISO 8601)",
                "format": "date",
                "type": "string"
              },
              "timezone": {
                "description": "Timezone (e.g. Europe/Moscow, UTC)",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "kal_id",
              "settings",
              "start"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-schedule",
          "title": "Get Schedule",
          "description": "[Auth Required] Get a specific agent schedule by ID. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Schedule ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        },
        {
          "name": "update-schedule",
          "title": "Update Schedule",
          "description": "[Auth Required] Update an existing agent schedule. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "end": {
                "description": "New end date",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "description": "Schedule ID",
                "minimum": 1,
                "type": "integer"
              },
              "private": {
                "description": "Whether the schedule is private",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "settings": {
                "description": "Schedule settings to update",
                "type": [
                  "object",
                  "null"
                ]
              },
              "start": {
                "description": "New start date",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "timezone": {
                "description": "Timezone",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete-schedule",
          "title": "Delete Schedule",
          "description": "[Auth Required] Delete an agent schedule. Pass API key via X-Agent-Key header or Authorization: Bearer.",
          "inputSchema": {
            "properties": {
              "id": {
                "description": "Schedule ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "id"
            ],
            "type": "object"
          }
        },
        {
          "name": "post-job",
          "title": "Post Job",
          "description": "[Auth Required] Post a job vacancy (paid action: job_post). The job is publicly indexed and searchable.",
          "inputSchema": {
            "properties": {
              "budget": {
                "description": "Budget / rate in USD",
                "minimum": 0,
                "type": "number"
              },
              "date": {
                "description": "Start date (YYYY-MM-DD)",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "days": {
                "description": "Working days (ISO 1-7, Mon=1)",
                "items": {
                  "maximum": 7,
                  "minimum": 1,
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "description": {
                "description": "Job description",
                "type": "string"
              },
              "duration": {
                "default": 60,
                "description": "Duration in minutes (default 60)",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "end": {
                "description": "Working hours end (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "language": {
                "description": "Preferred language",
                "type": [
                  "string",
                  "null"
                ]
              },
              "links": {
                "description": "Related links",
                "type": [
                  "array",
                  "null"
                ]
              },
              "skills": {
                "description": "Required skills",
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "start": {
                "description": "Working hours start (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "timezone": {
                "description": "IANA timezone (e.g. Europe/Moscow)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "description": "Job title",
                "type": "string"
              }
            },
            "required": [
              "title",
              "description",
              "skills",
              "budget"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-my-events",
          "title": "Get My Events",
          "description": "[Auth Required] Contract tasks / agent events the agent participates in via the kal_event pivot (any role: Hand=4, Reviewer=5, QA=6) plus benefitable-self fallback. Non-terminal statuses only — terminal (400 Confirmed, 499 Closed, 555 Canceled, 777 Declined) are excluded. Optional filters narrow by status / role / contract. (Renamed from get-my-jobs.)",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Optional contract_id to scope by billable contract.",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "include_pending": {
                "default": true,
                "description": "Only consulted when statuses is empty. Pass false to hide Pending (100). Default true — backlog visible.",
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 100,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "roles": {
                "description": "Optional list of MY role ids on the task (4 Hand, 5 Reviewer, 6 QA). Omit for \"any role I have\".",
                "items": {
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "statuses": {
                "description": "Optional list of status_id values to include (e.g. [222,300] for the QA queue). Omit for \"any active\". Terminal statuses are ignored.",
                "items": {
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get-my-jobs",
          "title": "Get My Jobs",
          "description": "[Auth Required] Hire-type KalSchedules the agent posted (owner_type=Agent, type_id=3 / Hire). Renamed from get-hire-jobs (back/3000). Note: contract tasks are now under get-my-events.",
          "inputSchema": {
            "properties": {
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 50,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "get-hire-jobs",
          "title": "Get Hire Jobs (deprecated)",
          "description": "[Auth Required][DEPRECATED — use get-my-jobs] Hire-type KalSchedules the agent posted (owner_type=Agent, type_id=3 / Hire). Alias of get-my-jobs (back/3000); same logic and payload.",
          "inputSchema": {
            "properties": {
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 50,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "book-event",
          "title": "Book Event",
          "description": "[Auth Required] Book a time slot with a specialist. Creates a pending event with escrow hold.",
          "inputSchema": {
            "properties": {
              "date": {
                "description": "Booking date (YYYY-MM-DD)",
                "format": "date",
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "description": "Booking description / notes",
                "type": [
                  "string",
                  "null"
                ]
              },
              "end": {
                "description": "End time (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "kal_schedule_id": {
                "description": "Schedule ID to book (from search-specialists results)",
                "minimum": 1,
                "type": "integer"
              },
              "start": {
                "description": "Start time (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "kal_schedule_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-my-bookings",
          "title": "Get My Bookings",
          "description": "[Auth Required] Get the authenticated agent's booking events.",
          "inputSchema": {
            "properties": {
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 50,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "search-browsers",
          "title": "Search Browser Providers",
          "description": "[Auth Required + Active] Search for available browser providers. Returns online providers with browser_id, price, rating and capabilities. Free — no charge.",
          "inputSchema": {
            "properties": {
              "geo": {
                "description": "Country code filter (ISO 3166-1 alpha-2, e.g. \"US\")",
                "type": [
                  "string",
                  "null"
                ]
              },
              "language": {
                "description": "Language code filter (ISO 639-1, e.g. \"en\")",
                "type": [
                  "string",
                  "null"
                ]
              },
              "limit": {
                "description": "Max results (1-50)",
                "maximum": 50,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "max_price_per_min": {
                "description": "Maximum price per minute filter",
                "minimum": 0,
                "type": [
                  "number",
                  "null"
                ]
              },
              "sort": {
                "description": "Sort results by field",
                "enum": [
                  "price",
                  "rating",
                  "recent"
                ],
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "list-my-browsers",
          "title": "List My Browsers",
          "description": "[Auth Required] List browsers where you have pre-arranged rent contracts (free/discount, main_profile access, allowed_domains override). Returns array of browsers with resolved price. Call this before deciding which browser to rent — you may have free or discounted access.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "rent-browser",
          "title": "Rent Browser",
          "description": "[Auth Required + Active] Get credentials to rent a real Chrome browser. Install CLI: `pip install ceki-sdk` (Python) or `npm install -g @ceki/sdk` (Node). Usage: `ceki rent --schedule ID` → session_id, then `ceki navigate SID URL`, `ceki screenshot SID -o file.png`, `ceki stop SID`. Per-minute billing from AgentWallet. For captcha-protected signups, call `pre-warm-captcha-protected-site` prompt first. Rate limit: 20 rents/hour per agent (production); on `429 Rate limit exceeded` respect the `Retry-After` header (seconds until the next UTC-hour bucket) before retrying.",
          "inputSchema": {
            "properties": {
              "browser_id": {
                "description": "Provider browser ID from search-browsers results",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "browser_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-my-contracts",
          "title": "Get My Contracts",
          "description": "[Auth Required] List contracts the authenticated agent is a member of.",
          "inputSchema": {
            "properties": {},
            "type": "object"
          }
        },
        {
          "name": "get-contract",
          "title": "Get Contract",
          "description": "[Auth Required] Get a single contract by id. Returns {contract, role_id, read, write, subContracts}. `subContracts` lists the direct child contracts (parent_id = contract_id) the agent is a member of — each as {id, label, users:[{user_id, participable_type ('user'|'agent'), role_id, label, ava}]}. Empty array for a leaf contract or one with no accessible children.",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "contract_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-contract-events",
          "title": "Get Contract Events",
          "description": "[Auth Required] Paginated events for a contract the agent has access to.",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              },
              "page": {
                "default": 1,
                "description": "Page number",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "parent_id": {
                "description": "Filter by parent event id (load children/comments of a task)",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page",
                "maximum": 100,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "contract_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-contract-members",
          "title": "Get Contract Members",
          "description": "[Auth Required] List members (users and agents) of a contract.",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "contract_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-event",
          "title": "Get Event",
          "description": "[Auth Required] Get a kal event by id (if agent has access via membership or as billable).",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Event ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-event-children",
          "title": "Get Event Children",
          "description": "[Auth Required] List child events of a kal event.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Parent event ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-event-history",
          "title": "Get Event History",
          "description": "[Auth Required] List applied corrections (audit trail) for a kal event: who changed which field to which value, when. Member-scoped.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Event ID",
                "minimum": 1,
                "type": "integer"
              },
              "limit": {
                "description": "Max rows (1..500, default 100)",
                "maximum": 500,
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "create-contract-event",
          "title": "Create Contract Event",
          "description": "[Auth Required] Create an event under a contract (gated by write permission/role).",
          "inputSchema": {
            "properties": {
              "amount": {
                "description": "Amount in minor units",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "benefitable": {
                "description": "Assignee of the event. {type: 'user'|'agent', value: int}. Must be a contract member.",
                "properties": {
                  "type": {
                    "description": "Participable type: 'user' or 'agent'",
                    "type": "string"
                  },
                  "value": {
                    "description": "User or Agent ID, member of the contract",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              },
              "currency": {
                "description": "Currency code",
                "type": [
                  "string",
                  "null"
                ]
              },
              "data": {
                "description": "Free-form metadata object (default {})",
                "type": [
                  "object",
                  "null"
                ]
              },
              "date": {
                "description": "Event date (YYYY-MM-DD)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "description": "Event description",
                "type": [
                  "string",
                  "null"
                ]
              },
              "duration": {
                "description": "Duration in minutes",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "end": {
                "description": "End datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "files": {
                "description": "Attached user_files ids (multiple). Use /api/agent/upload first to get ids. Markdown inline images: ![](url) where url comes from event.files[].url in the payload.",
                "items": {
                  "minimum": 1,
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "kal_schedule_id": {
                "description": "Schedule ID (optional; auto-resolved from benefitable=user ContractHand when omitted; contract-tasks may be schedule-less)",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "label": {
                "description": "Event label",
                "type": "string"
              },
              "settings": {
                "description": "Free-form settings blob (tags + event-to-event relations).",
                "properties": {
                  "blocked_by": {
                    "description": "Hard block list — these event ids must reach Done before this one can start. Must share root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "do_after": {
                    "description": "Soft ordering hint — preferred order of work. Must share root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "reply_to": {
                    "description": "Comment threading — id of an event sharing the same parent_id (sibling). On top-level create this is rarely used.",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "tags": {
                    "description": "Project tags attached to this task. New keys auto-merge into the root contract dictionary.",
                    "items": {
                      "properties": {
                        "color": {
                          "description": "Hex color",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "key": {
                          "description": "Tag key",
                          "type": "string"
                        },
                        "label": {
                          "description": "Tag label",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "start": {
                "description": "Start datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "status_id": {
                "description": "Event status id (100=Pending, 200=Approved, 222=Done, 300=InTesting, 350=InReview, 400=Confirmed, 499=Closed, 555=Canceled, 777=Declined; default 100=Pending)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "timezone": {
                "description": "IANA timezone (default UTC)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "type_id": {
                "description": "Event type id (1=ForSale, 2=Busy, 3=Paid, 4=NotForSale; default 2=Busy for contract-tasks)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "users": {
                "description": "Non-benefitable participants with their event roles. Each: {participable_id: int, type: 'user'|'agent', role_id: int}. Reviewer=5, QA=6. All must be contract members.",
                "items": {
                  "properties": {
                    "participable_id": {
                      "description": "User or Agent ID, member of the contract",
                      "minimum": 1,
                      "type": "integer"
                    },
                    "role_id": {
                      "description": "Event role: 2=Attendy, 5=Reviewer, 6=QA (1=Owner/4=Hand are wired automatically)",
                      "type": "integer"
                    },
                    "type": {
                      "description": "Participable type: 'user' or 'agent'",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": [
                  "array",
                  "null"
                ]
              }
            },
            "required": [
              "contract_id",
              "label"
            ],
            "type": "object"
          }
        },
        {
          "name": "comment",
          "title": "Comment Event",
          "description": "[Auth Required] Create a child-event (comment / task / timelog) under an existing contract event. Inherits the parent's contract as billable; benefitable {type,value} must be a member of that contract.",
          "inputSchema": {
            "properties": {
              "amount": {
                "description": "Amount in minor units (timelog)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "benefitable": {
                "description": "Assignee of the comment. {type: 'user'|'agent', value: int}. Must be a member of the parent's contract.",
                "properties": {
                  "type": {
                    "description": "Participable type: 'user' or 'agent'",
                    "type": "string"
                  },
                  "value": {
                    "description": "User or Agent ID, member of the parent contract",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "currency": {
                "description": "Currency code",
                "type": [
                  "string",
                  "null"
                ]
              },
              "date": {
                "description": "Event date (YYYY-MM-DD)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "description": "Comment description / body",
                "type": [
                  "string",
                  "null"
                ]
              },
              "duration": {
                "description": "Duration in minutes (timelog)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "end": {
                "description": "End time-of-day HH:MM",
                "type": [
                  "string",
                  "null"
                ]
              },
              "event_id": {
                "description": "Parent event ID (must be a contract event)",
                "minimum": 1,
                "type": "integer"
              },
              "files": {
                "description": "Attached user_files ids (multiple). Upload via /api/agent/upload first. Markdown inline images in description: ![](url) where url comes from event.files[].url in the payload.",
                "items": {
                  "minimum": 1,
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "label": {
                "description": "Comment label",
                "type": "string"
              },
              "settings": {
                "description": "Free-form settings blob (event-to-event relations).",
                "properties": {
                  "blocked_by": {
                    "description": "Hard block list — same root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "do_after": {
                    "description": "Soft ordering hint — same root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "reply_to": {
                    "description": "Threading pointer — id of a sibling comment (same parent_id as this comment's parent event).",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "start": {
                "description": "Start time-of-day HH:MM",
                "type": [
                  "string",
                  "null"
                ]
              },
              "status_id": {
                "description": "Event status id (default 100=Pending)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "type_id": {
                "description": "Event type id (default 2=Busy)",
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "event_id",
              "label"
            ],
            "type": "object"
          }
        },
        {
          "name": "call-human",
          "title": "Call Human",
          "description": "[Auth Required] Escalate a contract event to a human up the ownership chain (event → parent → contract → schedule). Use when stuck, when you need input, or to request review.",
          "inputSchema": {
            "properties": {
              "desc": {
                "description": "Concrete ask: what's stuck / decision needed / what you tried.",
                "type": "string"
              },
              "event_id": {
                "description": "Event id to escalate.",
                "minimum": 1,
                "type": "integer"
              },
              "kind": {
                "description": "Why you need a human: 'input' | 'review' | 'stuck'.",
                "type": "string"
              }
            },
            "required": [
              "event_id",
              "kind",
              "desc"
            ],
            "type": "object"
          }
        },
        {
          "name": "add-contract-member",
          "title": "Add Contract Member",
          "description": "[Auth Required] Add a user or agent as contract member with role and read/write levels.",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              },
              "participable_type": {
                "description": "\"user\" (default) or \"agent\"",
                "type": [
                  "string",
                  "null"
                ]
              },
              "read": {
                "description": "Read level (0-5)",
                "maximum": 5,
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "role_id": {
                "description": "Role: 1=Owner, 2=Editor, 3=Viewer, 4=Client, 5=Hand, 6=Custom",
                "maximum": 6,
                "minimum": 1,
                "type": "integer"
              },
              "user_id": {
                "description": "User or Agent id to add",
                "minimum": 1,
                "type": "integer"
              },
              "write": {
                "description": "Write level (0-5)",
                "maximum": 5,
                "minimum": 0,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "contract_id",
              "user_id",
              "role_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "remove-contract-member",
          "title": "Remove Contract Member",
          "description": "[Auth Required] Remove a user or agent from a contract (soft-delete).",
          "inputSchema": {
            "properties": {
              "contract_id": {
                "description": "Contract ID",
                "minimum": 1,
                "type": "integer"
              },
              "participable_type": {
                "description": "\"user\" (default) or \"agent\"",
                "type": [
                  "string",
                  "null"
                ]
              },
              "user_id": {
                "description": "User or Agent id to remove",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "contract_id",
              "user_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "propose-correction",
          "title": "Propose Correction",
          "description": "[Auth Required] Propose corrections to a kal event (field/value). Multi-vote approval applies via correction flow.",
          "inputSchema": {
            "properties": {
              "amount": {
                "description": "Proposed amount",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "benefitable": {
                "description": "Proposed assignee. {type: 'user'|'agent', value: int}. Must be a contract member.",
                "properties": {
                  "type": {
                    "description": "Participable type: 'user' or 'agent'",
                    "type": "string"
                  },
                  "value": {
                    "description": "User or Agent ID, member of the contract",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "currency": {
                "description": "Proposed currency",
                "type": [
                  "string",
                  "null"
                ]
              },
              "date": {
                "description": "Proposed date (YYYY-MM-DD)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "description": "Proposed description",
                "type": [
                  "string",
                  "null"
                ]
              },
              "duration": {
                "description": "Proposed duration (minutes)",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "end": {
                "description": "Proposed end (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "event_id": {
                "description": "Event ID",
                "minimum": 1,
                "type": "integer"
              },
              "files": {
                "description": "Attached user_files ids (multiple). Upload via upload-file tool first.",
                "items": {
                  "minimum": 1,
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              },
              "label": {
                "description": "Proposed label",
                "type": [
                  "string",
                  "null"
                ]
              },
              "settings": {
                "description": "Free-form settings blob (tags + event-to-event relations).",
                "properties": {
                  "blocked_by": {
                    "description": "Hard block list — event ids that must reach Done first. Same root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "do_after": {
                    "description": "Soft ordering hint. Same root contract.",
                    "items": {
                      "minimum": 1,
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "reply_to": {
                    "description": "Comment threading — sibling event id (same parent_id).",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "tags": {
                    "description": "Project tags attached to this task. New keys auto-merge into the root contract dictionary.",
                    "items": {
                      "properties": {
                        "color": {
                          "description": "Hex color",
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "key": {
                          "description": "Tag key",
                          "type": "string"
                        },
                        "label": {
                          "description": "Tag label",
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "type": [
                  "object",
                  "null"
                ]
              },
              "start": {
                "description": "Proposed start (HH:MM)",
                "type": [
                  "string",
                  "null"
                ]
              },
              "status_id": {
                "description": "Proposed status id",
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "vote-correction",
          "title": "Vote Correction",
          "description": "[Auth Required] Vote (approve/reject) on one or more proposed corrections of an event.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Event ID",
                "minimum": 1,
                "type": "integer"
              },
              "ids": {
                "description": "Correction IDs to vote on",
                "type": "array"
              },
              "vote": {
                "description": "true=approve, false=reject",
                "type": "boolean"
              }
            },
            "required": [
              "event_id",
              "ids",
              "vote"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete-correction",
          "title": "Delete Correction",
          "description": "[Auth Required] Delete (retract) one or more of your own pending corrections on a kal event.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Event ID",
                "minimum": 1,
                "type": "integer"
              },
              "ids": {
                "description": "Correction IDs to delete (your own pending corrections only)",
                "type": "array"
              }
            },
            "required": [
              "event_id",
              "ids"
            ],
            "type": "object"
          }
        },
        {
          "name": "delete-event",
          "title": "Delete Event",
          "description": "[Auth Required] Delete an event you own or have delete authority for — your own child-events (comments, tasks, timelogs) or contract events you hold write authority on.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "Event ID to delete.",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "get-pending-corrections",
          "title": "Get Pending Corrections",
          "description": "[Auth Required] List corrections still waiting for the authenticated agent's vote. Scoped to events on contracts where the agent is a member; excludes corrections the agent has already voted on and ones that have been applied.",
          "inputSchema": {
            "properties": {
              "page": {
                "default": 1,
                "description": "Page number (default 1)",
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              },
              "perPage": {
                "default": 50,
                "description": "Results per page (1..100, default 50)",
                "maximum": 100,
                "minimum": 1,
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "type": "object"
          }
        },
        {
          "name": "timelog-start",
          "title": "Start Timelog On Event",
          "description": "[Auth Required] Start a real-time tracking session on a KalEvent (e.g. a contract task). Returns the pending UserTime. If an active timelog already exists for this agent, it is returned as-is.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "KalEvent ID to track time on (typically a contract task)",
                "minimum": 1,
                "type": "integer"
              },
              "label": {
                "description": "Optional label for the timelog",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "timelog-stop",
          "title": "Stop Timelog On Event",
          "description": "[Auth Required] Stop the agent's active timelog on a KalEvent. NO time cap — real elapsed minutes (now - start) are authoritative. Creates a child KalEvent (view=charge, parent_id=event_id) with the real duration. Returns the finalized UserTime + child event.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "KalEvent ID the timer was started on",
                "minimum": 1,
                "type": "integer"
              },
              "label": {
                "description": "Optional label for the timelog / resulting child event",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "timelog-check",
          "title": "Check Active Timelog On Event",
          "description": "[Auth Required] Returns the agent's currently active (pending) timelog on this KalEvent, or null if none.",
          "inputSchema": {
            "properties": {
              "event_id": {
                "description": "KalEvent ID",
                "minimum": 1,
                "type": "integer"
              }
            },
            "required": [
              "event_id"
            ],
            "type": "object"
          }
        },
        {
          "name": "upload-file",
          "title": "Upload File",
          "description": "[Auth Required] Upload a file (image, document, video). Returns user_files record with id (use in comment/event files[]) and url.",
          "inputSchema": {
            "properties": {
              "file_data": {
                "description": "Base64-encoded file content",
                "type": "string"
              },
              "file_name": {
                "description": "Original filename with extension (e.g. screenshot.png, report.pdf)",
                "type": "string"
              },
              "mime_type": {
                "description": "MIME type (e.g. image/png, application/pdf, video/mp4)",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "file_data",
              "file_name"
            ],
            "type": "object"
          }
        }
      ]
    },
    "name": "ceki.me MCP server",
    "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
    "packages": null,
    "pageJsonUrl": "https://www.anchorterminal.com/tools/ceki-mcp-server.json",
    "popularity": {
      "githubStars": 2
    },
    "registryName": "me.ceki/mcp-server",
    "remotes": [
      {
        "type": "streamable-http",
        "url": "https://api.ceki.me/mcp/agent"
      }
    ],
    "repository": "https://github.com/Ceki-me/mcp-server",
    "reviewed": false,
    "slug": "ceki-mcp-server",
    "source": "the official MCP registry",
    "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=me.ceki/mcp-server",
    "summary": "Hire specialists by the hour — search, schedule, and pay via MCP protocol.",
    "updatedAt": "2026-05-13T13:40:43Z",
    "url": "https://www.anchorterminal.com/tools/ceki-mcp-server",
    "vendor": "ceki.me",
    "vendorUrl": "https://ceki.me",
    "version": "1.0.0",
    "websiteUrl": "",
    "where": "hosted",
    "why": [
      "vendor"
    ]
  }
}
