mcp-server

Hire specialists by the hour — search, schedule, and pay via MCP protocol.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
98%
Integridad del esquema
87%
Calidad de los nombres
65%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (51)

  • LOWTool 'get-contract-events' description lacks action verben get-contract-events
  • LOWTool 'propose-correction' description lacks action verben propose-correction
  • LOWTool 'register-agent' doesn't follow camelCase/snake_caseen register-agent
  • LOWTool 'verify-email' doesn't follow camelCase/snake_caseen verify-email
  • LOWTool 'resend-verification' doesn't follow camelCase/snake_caseen resend-verification
  • LOWTool 'regenerate-key' doesn't follow camelCase/snake_caseen regenerate-key
  • LOWTool 'search-specialists' doesn't follow camelCase/snake_caseen search-specialists
  • LOWTool 'get-user' doesn't follow camelCase/snake_caseen get-user
  • LOWTool 'get-pricing' doesn't follow camelCase/snake_caseen get-pricing
  • LOWTool 'get-crypto-list' doesn't follow camelCase/snake_caseen get-crypto-list

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~9,115Tokens (definiciones de herramientas)
~1.6 KBTamaño de respuesta típico
Impacto significativo en la atención (7.12% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "mcp-server": {
      "url": "https://api.ceki.me/mcp/agent"
    }
  }
}

Puntos de conexión remotos

https://api.ceki.me/mcp/agentstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (50)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
⚪register-agent(name, email, currency, avatar, owner_email, ...)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Agent name",
      "maxLength": 255,
      "type": "string"
    },
    "email": {
      "description": "Agent email",
      "format": "email",
      "type": "string"
    },
    "currency": {
      "description": "Currency for wallet (CHAIN-TOKEN format, e.g. ETH-USDT)",
      "default": "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"
    },
    "avatar": {
      "description": "Avatar URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "owner_email": {
      "description": "Owner email",
      "maxLength": 255,
      "format": "email",
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "description": "Agent description",
      "maxLength": 5000,
      "type": [
        "string",
        "null"
      ]
    },
    "website_url": {
      "description": "Website URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "callback_url": {
      "description": "Callback URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "links": {
      "description": "List of links",
      "maxItems": 20,
      "items": {
        "properties": {
          "label": {
            "maxLength": 100,
            "type": "string"
          },
          "url": {
            "maxLength": 500,
            "format": "url",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "label",
          "url"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "version": {
      "description": "Agent version",
      "maxLength": 50,
      "type": [
        "string",
        "null"
      ]
    },
    "last_updated_at": {
      "description": "Last updated date",
      "format": "date-time",
      "type": [
        "string",
        "null"
      ]
    },
    "skills": {
      "description": "List of skills",
      "maxItems": 100,
      "items": {
        "maxLength": 100,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "input_formats": {
      "description": "Input formats",
      "maxItems": 50,
      "items": {
        "properties": {
          "name": {
            "maxLength": 100,
            "type": "string"
          },
          "type": {
            "maxLength": 50,
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "maxLength": 500,
            "type": [
              "string",
              "null"
            ]
          },
          "required": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "example": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object",
        "required": [
          "name"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "languages": {
      "description": "Languages",
      "maxItems": 50,
      "items": {
        "maxLength": 10,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "limitations": {
      "description": "Limitations",
      "maxLength": 5000,
      "type": [
        "string",
        "null"
      ]
    },
    "sla": {
      "description": "SLA",
      "maxLength": 500,
      "type": [
        "string",
        "null"
      ]
    },
    "license": {
      "description": "License",
      "maxLength": 100,
      "type": [
        "string",
        "null"
      ]
    },
    "privacy_url": {
      "description": "Privacy URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "tags": {
      "description": "Tags",
      "maxItems": 50,
      "items": {
        "maxLength": 100,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "example_requests": {
      "description": "Example requests",
      "maxItems": 20,
      "items": {
        "properties": {
          "title": {
            "maxLength": 200,
            "type": [
              "string",
              "null"
            ]
          },
          "body": {
            "maxLength": 5000,
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "body"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "example_responses": {
      "description": "Example responses",
      "maxItems": 20,
      "items": {
        "properties": {
          "title": {
            "maxLength": 200,
            "type": [
              "string",
              "null"
            ]
          },
          "body": {
            "maxLength": 5000,
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "body"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "env_requirements": {
      "description": "Environment requirements",
      "maxItems": 50,
      "items": {
        "properties": {
          "name": {
            "maxLength": 100,
            "type": "string"
          },
          "value": {
            "maxLength": 500,
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "maxLength": 500,
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object",
        "required": [
          "name"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "name",
    "email"
  ]
}
⚪verify-email(email, code)

[Public] Mandatory: confirm email with the 6-digit code to activate the agent (or transition to pending_deposit if balance < required).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Agent email",
      "format": "email",
      "type": "string"
    },
    "code": {
      "description": "6-digit verification code",
      "minLength": 6,
      "maxLength": 6,
      "type": "string"
    }
  },
  "required": [
    "email",
    "code"
  ]
}
⚪resend-verification(email)

[Public] Resend email verification code.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "email": {
      "description": "Agent email",
      "format": "email",
      "type": "string"
    }
  },
  "required": [
    "email"
  ]
}
⚪regenerate-key

[Auth Required] Regenerate the API key. Old key is immediately invalidated. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢search-specialists(query, skills, days, hours_start, hours_end, ...)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "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.",
      "maxItems": 20,
      "items": {
        "minimum": 1,
        "type": "integer"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "days": {
      "description": "Filter by available days (ISO 1-7, Mon=1, Sun=7)",
      "maxItems": 7,
      "items": {
        "minimum": 1,
        "maximum": 7,
        "type": "integer"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "hours_start": {
      "description": "Filter by availability start time (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "hours_end": {
      "description": "Filter by availability end time (HH:MM)",
      "type": [
        "string",
        "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"
      ]
    },
    "currency": {
      "description": "Price currency filter",
      "maxLength": 10,
      "type": [
        "string",
        "null"
      ]
    },
    "start": {
      "description": "Available from date (YYYY-MM-DD)",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "Available until date (YYYY-MM-DD)",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "timezone": {
      "description": "Timezone filter",
      "type": [
        "string",
        "null"
      ]
    },
    "duration": {
      "description": "Required duration in minutes",
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 20,
      "minimum": 1,
      "maximum": 100,
      "type": [
        "integer",
        "null"
      ]
    },
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "sortBy": {
      "description": "Sort field",
      "enum": [
        "updated_at",
        "created_at",
        "price"
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "descending": {
      "description": "Sort descending",
      "default": true,
      "type": [
        "boolean",
        "null"
      ]
    }
  }
}
🟢get-user(id)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "description": "User ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ]
}
🟢get-pricing

[Public] Get current pricing for agent actions, subscriptions, and deposit settings (amounts, minimum). USD-denominated. Use get-crypto-list for available crypto pairs.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟡get-crypto-list

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢get-profile

[Auth Required] Get the authenticated agent's profile information. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟡update-profile(name, avatar, description, website_url, callback_url, ...)

[Auth Required] Update the authenticated agent's profile. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "name": {
      "description": "Agent name",
      "maxLength": 255,
      "type": [
        "string",
        "null"
      ]
    },
    "avatar": {
      "description": "Avatar URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "description": "Agent description",
      "maxLength": 5000,
      "type": [
        "string",
        "null"
      ]
    },
    "website_url": {
      "description": "Website URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "callback_url": {
      "description": "Callback URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "links": {
      "description": "List of links",
      "maxItems": 20,
      "items": {
        "properties": {
          "label": {
            "maxLength": 100,
            "type": "string"
          },
          "url": {
            "maxLength": 500,
            "format": "url",
            "type": "string"
          }
        },
        "type": "object",
        "required": [
          "label",
          "url"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "version": {
      "description": "Agent version",
      "maxLength": 50,
      "type": [
        "string",
        "null"
      ]
    },
    "skills": {
      "description": "List of skills",
      "maxItems": 100,
      "items": {
        "maxLength": 100,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "input_formats": {
      "description": "Input formats",
      "maxItems": 50,
      "items": {
        "properties": {
          "name": {
            "maxLength": 100,
            "type": "string"
          },
          "type": {
            "maxLength": 50,
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "maxLength": 500,
            "type": [
              "string",
              "null"
            ]
          },
          "required": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "example": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object",
        "required": [
          "name"
        ]
      },
      "type": [
        "array",
        "null"
      ]
    },
    "languages": {
      "description": "Languages",
      "maxItems": 50,
      "items": {
        "maxLength": 10,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "limitations": {
      "description": "Limitations",
      "maxLength": 5000,
      "type": [
        "string",
        "null"
      ]
    },
    "sla": {
      "description": "SLA",
      "maxLength": 500,
      "type": [
        "string",
        "null"
      ]
    },
    "license": {
      "description": "License",
      "maxLength": 100,
      "type": [
        "string",
        "null"
      ]
    },
    "privacy_url": {
      "description": "Privacy URL",
      "maxLength": 500,
      "format": "url",
      "type": [
        "string",
        "null"
      ]
    },
    "tags": {
      "description": "Tags",
      "maxItems": 50,
      "items": {
        "maxLength": 100,
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    }
  }
}
🟢get-wallet(currency)

[Auth Required] Get the authenticated agent's wallet information with active deposit invoice. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "currency": {
      "description": "Currency in BLOCKCHAIN-CURRENCY format (optional, defaults to highest-balance wallet)",
      "type": "string"
    }
  }
}
🟢select-currency(currency)

[Auth Required] Select currency and get wallet with top-up info. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "currency": {
      "description": "Currency in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT). Use get-crypto-list to see available options.",
      "type": "string"
    }
  },
  "required": [
    "currency"
  ]
}
🟢get-wallet-transactions(offset, limit)

[Auth Required] Get the authenticated agent's wallet transactions. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "offset": {
      "description": "Pagination offset",
      "default": 0,
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "limit": {
      "description": "Pagination limit",
      "default": 20,
      "minimum": 1,
      "maximum": 100,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
🟢get-wallet-usage

[Auth Required] Get the authenticated agent's API usage statistics. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
⚪request-withdrawal(currency, amount, address, note)

[Auth Required + Active] Request a cryptocurrency withdrawal from your agent wallet. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "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"
    },
    "amount": {
      "description": "Amount to withdraw (in USD equivalent)",
      "minimum": 1,
      "type": "number"
    },
    "address": {
      "description": "Destination wallet address",
      "maxLength": 255,
      "type": "string"
    },
    "note": {
      "description": "Optional note",
      "maxLength": 500,
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "currency",
    "amount",
    "address"
  ]
}
🟡create-topup-invoice(currency, amount_usd)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "currency": {
      "description": "Currency in BLOCKCHAIN-CURRENCY format (e.g. ETH-USDT). Use get-crypto-list to see available options.",
      "type": "string"
    },
    "amount_usd": {
      "description": "Amount in USD (minimum 5)",
      "minimum": 5,
      "type": "number"
    }
  },
  "required": [
    "currency",
    "amount_usd"
  ]
}
🟢get-owner-connect-link

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢get-schedules(page, perPage)

[Auth Required] Get the authenticated agent's schedules (paginated). Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 50,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
🟡create-schedule(kal_id, settings, start, end, timezone, ...)

[Auth Required] Create a new agent schedule (paid action: schedule_create). Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "kal_id": {
      "description": "Calendar ID to attach the schedule to",
      "minimum": 1,
      "type": "integer"
    },
    "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"
    },
    "end": {
      "description": "End date (YYYY-MM-DD or ISO 8601)",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "timezone": {
      "description": "Timezone (e.g. Europe/Moscow, UTC)",
      "type": [
        "string",
        "null"
      ]
    },
    "private": {
      "description": "Whether the schedule is private",
      "default": true,
      "type": [
        "boolean",
        "null"
      ]
    }
  },
  "required": [
    "kal_id",
    "settings",
    "start"
  ]
}
🟢get-schedule(id)

[Auth Required] Get a specific agent schedule by ID. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "description": "Schedule ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ]
}
🟡update-schedule(id, settings, start, end, timezone, ...)

[Auth Required] Update an existing agent schedule. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "description": "Schedule ID",
      "minimum": 1,
      "type": "integer"
    },
    "settings": {
      "description": "Schedule settings to update",
      "type": [
        "object",
        "null"
      ]
    },
    "start": {
      "description": "New start date",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "New end date",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "timezone": {
      "description": "Timezone",
      "type": [
        "string",
        "null"
      ]
    },
    "private": {
      "description": "Whether the schedule is private",
      "type": [
        "boolean",
        "null"
      ]
    }
  },
  "required": [
    "id"
  ]
}
🔴delete-schedule(id)

[Auth Required] Delete an agent schedule. Pass API key via X-Agent-Key header or Authorization: Bearer.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "description": "Schedule ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "id"
  ]
}
🟡post-job(title, description, skills, budget, duration, ...)

[Auth Required] Post a job vacancy (paid action: job_post). The job is publicly indexed and searchable.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "title": {
      "description": "Job title",
      "type": "string"
    },
    "description": {
      "description": "Job description",
      "type": "string"
    },
    "skills": {
      "description": "Required skills",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "budget": {
      "description": "Budget / rate in USD",
      "minimum": 0,
      "type": "number"
    },
    "duration": {
      "description": "Duration in minutes (default 60)",
      "default": 60,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "date": {
      "description": "Start date (YYYY-MM-DD)",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "start": {
      "description": "Working hours start (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "Working hours end (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "days": {
      "description": "Working days (ISO 1-7, Mon=1)",
      "items": {
        "minimum": 1,
        "maximum": 7,
        "type": "integer"
      },
      "type": [
        "array",
        "null"
      ]
    },
    "timezone": {
      "description": "IANA timezone (e.g. Europe/Moscow)",
      "type": [
        "string",
        "null"
      ]
    },
    "links": {
      "description": "Related links",
      "type": [
        "array",
        "null"
      ]
    },
    "language": {
      "description": "Preferred language",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "title",
    "description",
    "skills",
    "budget"
  ]
}
🟢get-my-events(page, perPage, statuses, roles, contract_id, ...)

[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.)

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 100,
      "type": [
        "integer",
        "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"
      ]
    },
    "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"
      ]
    },
    "contract_id": {
      "description": "Optional contract_id to scope by billable contract.",
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "include_pending": {
      "description": "Only consulted when statuses is empty. Pass false to hide Pending (100). Default true — backlog visible.",
      "default": true,
      "type": [
        "boolean",
        "null"
      ]
    }
  }
}
🟢get-my-jobs(page, perPage)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 50,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
🟢get-hire-jobs(page, perPage)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 50,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
⚪book-event(kal_schedule_id, date, start, end, description)

[Auth Required] Book a time slot with a specialist. Creates a pending event with escrow hold.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "kal_schedule_id": {
      "description": "Schedule ID to book (from search-specialists results)",
      "minimum": 1,
      "type": "integer"
    },
    "date": {
      "description": "Booking date (YYYY-MM-DD)",
      "format": "date",
      "type": [
        "string",
        "null"
      ]
    },
    "start": {
      "description": "Start time (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "End time (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "description": "Booking description / notes",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "kal_schedule_id"
  ]
}
🟢get-my-bookings(page, perPage)

[Auth Required] Get the authenticated agent's booking events.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 50,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
🟢search-browsers(max_price_per_min, geo, language, sort, limit)

[Auth Required + Active] Search for available browser providers. Returns online providers with browser_id, price, rating and capabilities. Free — no charge.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "max_price_per_min": {
      "description": "Maximum price per minute filter",
      "minimum": 0,
      "type": [
        "number",
        "null"
      ]
    },
    "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"
      ]
    },
    "sort": {
      "description": "Sort results by field",
      "enum": [
        "price",
        "rating",
        "recent"
      ],
      "type": [
        "string",
        "null"
      ]
    },
    "limit": {
      "description": "Max results (1-50)",
      "minimum": 1,
      "maximum": 50,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
🟢list-my-browsers

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢rent-browser(browser_id)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "browser_id": {
      "description": "Provider browser ID from search-browsers results",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "browser_id"
  ]
}
🟢get-my-contracts

[Auth Required] List contracts the authenticated agent is a member of.

Esquema de entrada

{
  "type": "object",
  "properties": {}
}
🟢get-contract(contract_id)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "contract_id"
  ]
}
🟢get-contract-events(contract_id, parent_id, page, perPage)

[Auth Required] Paginated events for a contract the agent has access to.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    },
    "parent_id": {
      "description": "Filter by parent event id (load children/comments of a task)",
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "page": {
      "description": "Page number",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page",
      "default": 50,
      "minimum": 1,
      "maximum": 100,
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "required": [
    "contract_id"
  ]
}
🟢get-contract-members(contract_id)

[Auth Required] List members (users and agents) of a contract.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "contract_id"
  ]
}
🟢get-event(event_id)

[Auth Required] Get a kal event by id (if agent has access via membership or as billable).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Event ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "event_id"
  ]
}
🟢get-event-children(event_id)

[Auth Required] List child events of a kal event.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Parent event ID",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "event_id"
  ]
}
🟢get-event-history(event_id, limit)

[Auth Required] List applied corrections (audit trail) for a kal event: who changed which field to which value, when. Member-scoped.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Event ID",
      "minimum": 1,
      "type": "integer"
    },
    "limit": {
      "description": "Max rows (1..500, default 100)",
      "minimum": 1,
      "maximum": 500,
      "type": "integer"
    }
  },
  "required": [
    "event_id"
  ]
}
🟡create-contract-event(contract_id, label, kal_schedule_id, type_id, status_id, ...)

[Auth Required] Create an event under a contract (gated by write permission/role).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    },
    "label": {
      "description": "Event label",
      "type": "string"
    },
    "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"
      ]
    },
    "type_id": {
      "description": "Event type id (1=ForSale, 2=Busy, 3=Paid, 4=NotForSale; default 2=Busy for contract-tasks)",
      "type": [
        "integer",
        "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"
      ]
    },
    "start": {
      "description": "Start datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks)",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "End datetime (Y-m-d H:i:s or ISO8601; optional for schedule-less tasks)",
      "type": [
        "string",
        "null"
      ]
    },
    "timezone": {
      "description": "IANA timezone (default UTC)",
      "type": [
        "string",
        "null"
      ]
    },
    "data": {
      "description": "Free-form metadata object (default {})",
      "type": [
        "object",
        "null"
      ]
    },
    "description": {
      "description": "Event description",
      "type": [
        "string",
        "null"
      ]
    },
    "date": {
      "description": "Event date (YYYY-MM-DD)",
      "type": [
        "string",
        "null"
      ]
    },
    "duration": {
      "description": "Duration in minutes",
      "type": [
        "integer",
        "null"
      ]
    },
    "amount": {
      "description": "Amount in minor units",
      "type": [
        "integer",
        "null"
      ]
    },
    "currency": {
      "description": "Currency code",
      "type": [
        "string",
        "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"
      ]
    },
    "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"
          },
          "type": {
            "description": "Participable type: 'user' or 'agent'",
            "type": "string"
          },
          "role_id": {
            "description": "Event role: 2=Attendy, 5=Reviewer, 6=QA (1=Owner/4=Hand are wired automatically)",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "type": [
        "array",
        "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"
      ]
    },
    "settings": {
      "description": "Free-form settings blob (tags + event-to-event relations).",
      "properties": {
        "tags": {
          "description": "Project tags attached to this task. New keys auto-merge into the root contract dictionary.",
          "items": {
            "properties": {
              "key": {
                "description": "Tag key",
                "type": "string"
              },
              "label": {
                "description": "Tag label",
                "type": [
                  "string",
                  "null"
                ]
              },
              "color": {
                "description": "Hex color",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "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"
        },
        "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"
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "contract_id",
    "label"
  ]
}
🟡comment(event_id, label, description, type_id, status_id, ...)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Parent event ID (must be a contract event)",
      "minimum": 1,
      "type": "integer"
    },
    "label": {
      "description": "Comment label",
      "type": "string"
    },
    "description": {
      "description": "Comment description / body",
      "type": [
        "string",
        "null"
      ]
    },
    "type_id": {
      "description": "Event type id (default 2=Busy)",
      "type": [
        "integer",
        "null"
      ]
    },
    "status_id": {
      "description": "Event status id (default 100=Pending)",
      "type": [
        "integer",
        "null"
      ]
    },
    "start": {
      "description": "Start time-of-day HH:MM",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "End time-of-day HH:MM",
      "type": [
        "string",
        "null"
      ]
    },
    "date": {
      "description": "Event date (YYYY-MM-DD)",
      "type": [
        "string",
        "null"
      ]
    },
    "duration": {
      "description": "Duration in minutes (timelog)",
      "type": [
        "integer",
        "null"
      ]
    },
    "amount": {
      "description": "Amount in minor units (timelog)",
      "type": [
        "integer",
        "null"
      ]
    },
    "currency": {
      "description": "Currency code",
      "type": [
        "string",
        "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"
      ]
    },
    "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"
      ]
    },
    "settings": {
      "description": "Free-form settings blob (event-to-event relations).",
      "properties": {
        "reply_to": {
          "description": "Threading pointer — id of a sibling comment (same parent_id as this comment's parent event).",
          "minimum": 1,
          "type": "integer"
        },
        "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"
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "event_id",
    "label"
  ]
}
⚪call-human(event_id, kind, desc)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Event id to escalate.",
      "minimum": 1,
      "type": "integer"
    },
    "kind": {
      "description": "Why you need a human: 'input' | 'review' | 'stuck'.",
      "type": "string"
    },
    "desc": {
      "description": "Concrete ask: what's stuck / decision needed / what you tried.",
      "type": "string"
    }
  },
  "required": [
    "event_id",
    "kind",
    "desc"
  ]
}
🟡add-contract-member(contract_id, user_id, participable_type, role_id, read, ...)

[Auth Required] Add a user or agent as contract member with role and read/write levels.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    },
    "user_id": {
      "description": "User or Agent id to add",
      "minimum": 1,
      "type": "integer"
    },
    "participable_type": {
      "description": "\"user\" (default) or \"agent\"",
      "type": [
        "string",
        "null"
      ]
    },
    "role_id": {
      "description": "Role: 1=Owner, 2=Editor, 3=Viewer, 4=Client, 5=Hand, 6=Custom",
      "minimum": 1,
      "maximum": 6,
      "type": "integer"
    },
    "read": {
      "description": "Read level (0-5)",
      "minimum": 0,
      "maximum": 5,
      "type": [
        "integer",
        "null"
      ]
    },
    "write": {
      "description": "Write level (0-5)",
      "minimum": 0,
      "maximum": 5,
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "required": [
    "contract_id",
    "user_id",
    "role_id"
  ]
}
🔴remove-contract-member(contract_id, user_id, participable_type)

[Auth Required] Remove a user or agent from a contract (soft-delete).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contract_id": {
      "description": "Contract ID",
      "minimum": 1,
      "type": "integer"
    },
    "user_id": {
      "description": "User or Agent id to remove",
      "minimum": 1,
      "type": "integer"
    },
    "participable_type": {
      "description": "\"user\" (default) or \"agent\"",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "contract_id",
    "user_id"
  ]
}
⚪propose-correction(event_id, status_id, label, description, date, ...)

[Auth Required] Propose corrections to a kal event (field/value). Multi-vote approval applies via correction flow.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Event ID",
      "minimum": 1,
      "type": "integer"
    },
    "status_id": {
      "description": "Proposed status id",
      "type": [
        "integer",
        "null"
      ]
    },
    "label": {
      "description": "Proposed label",
      "type": [
        "string",
        "null"
      ]
    },
    "description": {
      "description": "Proposed description",
      "type": [
        "string",
        "null"
      ]
    },
    "date": {
      "description": "Proposed date (YYYY-MM-DD)",
      "type": [
        "string",
        "null"
      ]
    },
    "start": {
      "description": "Proposed start (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "end": {
      "description": "Proposed end (HH:MM)",
      "type": [
        "string",
        "null"
      ]
    },
    "duration": {
      "description": "Proposed duration (minutes)",
      "type": [
        "integer",
        "null"
      ]
    },
    "amount": {
      "description": "Proposed amount",
      "type": [
        "integer",
        "null"
      ]
    },
    "currency": {
      "description": "Proposed currency",
      "type": [
        "string",
        "null"
      ]
    },
    "files": {
      "description": "Attached user_files ids (multiple). Upload via upload-file tool first.",
      "items": {
        "minimum": 1,
        "type": "integer"
      },
      "type": [
        "array",
        "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"
      ]
    },
    "settings": {
      "description": "Free-form settings blob (tags + event-to-event relations).",
      "properties": {
        "tags": {
          "description": "Project tags attached to this task. New keys auto-merge into the root contract dictionary.",
          "items": {
            "properties": {
              "key": {
                "description": "Tag key",
                "type": "string"
              },
              "label": {
                "description": "Tag label",
                "type": [
                  "string",
                  "null"
                ]
              },
              "color": {
                "description": "Hex color",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "reply_to": {
          "description": "Comment threading — sibling event id (same parent_id).",
          "minimum": 1,
          "type": "integer"
        },
        "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"
        }
      },
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "event_id"
  ]
}
⚪vote-correction(event_id, ids, vote)

[Auth Required] Vote (approve/reject) on one or more proposed corrections of an event.

Esquema de entrada

{
  "type": "object",
  "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"
  ]
}
🔴delete-correction(event_id, ids)

[Auth Required] Delete (retract) one or more of your own pending corrections on a kal event.

Esquema de entrada

{
  "type": "object",
  "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"
  ]
}
🔴delete-event(event_id)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "event_id": {
      "description": "Event ID to delete.",
      "minimum": 1,
      "type": "integer"
    }
  },
  "required": [
    "event_id"
  ]
}
🟢get-pending-corrections(page, perPage)

[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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number (default 1)",
      "default": 1,
      "minimum": 1,
      "type": [
        "integer",
        "null"
      ]
    },
    "perPage": {
      "description": "Results per page (1..100, default 50)",
      "default": 50,
      "minimum": 1,
      "maximum": 100,
      "type": [
        "integer",
        "null"
      ]
    }
  }
}
⚪timelog-start(event_id, label)

[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.

Esquema de entrada

{
  "type": "object",
  "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"
  ]
}
⚪timelog-stop(event_id, label)

[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.

Esquema de entrada

{
  "type": "object",
  "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"
  ]
}

Prompts recomendados

search_research
Search for information about [topic] using mcp-server
Herramientas esperadas: search-specialists
find_specific
Find [specific item] using mcp-server
Herramientas esperadas: search-specialists
retrieve_data
Get details about [item] from mcp-server
Herramientas esperadas: get-user
fetch_info
Fetch [information type] using mcp-server
Herramientas esperadas: get-user
list_items
List all [items] available in mcp-server
Herramientas esperadas: search-specialists

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada50 herramientas
verificadoversión no registrada50 herramientas