mcp-server

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

사용해야 할까요

품질 및 안전성

A
설명 품질
98%
스키마 완전성
87%
이름 품질
65%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (51)

  • LOWTool 'get-contract-events' description lacks action verbget-contract-events에서
  • LOWTool 'propose-correction' description lacks action verbpropose-correction에서
  • LOWTool 'register-agent' doesn't follow camelCase/snake_caseregister-agent에서
  • LOWTool 'verify-email' doesn't follow camelCase/snake_caseverify-email에서
  • LOWTool 'resend-verification' doesn't follow camelCase/snake_caseresend-verification에서
  • LOWTool 'regenerate-key' doesn't follow camelCase/snake_caseregenerate-key에서
  • LOWTool 'search-specialists' doesn't follow camelCase/snake_casesearch-specialists에서
  • LOWTool 'get-user' doesn't follow camelCase/snake_caseget-user에서
  • LOWTool 'get-pricing' doesn't follow camelCase/snake_caseget-pricing에서
  • LOWTool 'get-crypto-list' doesn't follow camelCase/snake_caseget-crypto-list에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~9,115토큰 (도구 정의)
~1.6 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 7.12%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

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

원격 엔드포인트

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

할 수 있는 일

도구 목록

도구 (50)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
⚪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.

입력 스키마

{
  "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).

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.)

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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).

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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).

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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).

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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.

입력 스키마

{
  "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"
  ]
}

권장 프롬프트

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

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 50개
검증됨버전이 기록되지 않음도구 50개