gunio-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gunio-mcpshow my recent job applications"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gunio-mcp
A local-only, Docker-packaged MCP server (and a thin read CLI) for gun.io, authenticated with your own browser session — the same host-side cookie-broker + wrapper pattern as claudesync. It lets an MCP client (Claude Code, etc.) read your gun.io freelancer data — interviews, applications, jobs, profile — and perform a small set of gated writes.
Unofficial. No affiliation with gun.io. This talks to gun.io's private, undocumented API using your logged-in session. It is a personal automation tool; use it at your own risk and within gun.io's Terms of Service. No gun.io code is included in this repo.
How it works
Firefox session ──(host-side broker: rookie-cli)──▶ GUNIO_COOKIE ──▶ docker run ──▶ FastMCP server ──▶ app.gun.io/api/v2A cookie broker (
scripts/lib/harvest-cookie.sh) reads your gun.io session (sessionid+csrftoken) from the browser, host-side. Nothing leaves your machine.A thin wrapper passes that cookie into a container via the
GUNIO_COOKIEenv var anddocker runs it per invocation.Inside the container, a Python/FastMCP server (
gunio_mcp) calls gun.io's/api/v2through a safety-guarded client (gunio_broker).
Related MCP server: Upwork MCP Server
Security model
Reads need only the cookies. Writes echo the
csrftokenasX-CSRFToken(Django CSRF), and are double-gated: a call previews unlessconfirm=trueand the server env hasGUNIO_MCP_WRITE_SCOPEset.Hard denylist in the client, enforced regardless of tool:
auth/logout(a GET that kills your session), the entire/staff/tree,DELETEon a freelancer (account deletion),complete-screening, and telemetry writes.Cookies are never logged or placed in exceptions.
Local only. No data is sent anywhere except gun.io itself.
Install (once Docker image + installer land)
# bootstrap the broker + wrappers, pull the image
scripts/gunio-setup.sh install
# register the MCP server with Claude Code
claude mcp add --scope user gunio ~/.local/share/gunio/gunio-mcp-wrapper.shTo enable writes, set GUNIO_MCP_WRITE_SCOPE=writes in the server env (see the wrapper). Without it, write tools only ever return a dry-run preview.
Remote mode (--serve)
By default gunio-mcp speaks MCP over stdio for a local client. With --serve it
instead runs FastMCP's streamable HTTP transport as a long-lived service:
gunio-mcp --serve # http://127.0.0.1:8000/mcp
gunio-mcp --serve --host 0.0.0.0 --port 9000Configuration (flags win over env vars):
Flag | Env var | Default | Meaning |
|
|
| bind host |
|
|
| bind port |
n/a |
| unset | static bearer token required from clients |
n/a |
| unset |
|
Naming convention: GUNIO_MCP_* vars configure the server process itself;
GUNIO_* vars (today just GUNIO_COOKIE) configure the gun.io account/session.
Endpoint security
GUNIO_COOKIE authenticates the server TO gun.io; nothing inherent authenticates
clients TO this server. Anyone who can reach the HTTP endpoint can act as your
gun.io account, including gated writes if the write scope is set. Therefore:
Set
GUNIO_MCP_AUTH_TOKENto requireAuthorization: Bearer <token>on every request (compared in constant time; never logged).Binding a non-loopback host without that token refuses to start, unless you explicitly set
GUNIO_MCP_INSECURE=1because the network layer (e.g. Tailscale or an authenticating proxy) already provides access control.Do NOT set
GUNIO_MCP_WRITE_SCOPEon a remote deployment unlessGUNIO_MCP_AUTH_TOKENis configured.
Bearer auth applies only to serve mode; the stdio default ignores these vars.
Docker
docker run -e GUNIO_COOKIE=... -e GUNIO_MCP_AUTH_TOKEN=... -p 8000:8000 \
gunio-mcp:local --serve --host 0.0.0.0Inside a container, binding 0.0.0.0 with the token set is the expected pattern.
Operational caveat: the cookie is a deploy-time secret
In remote mode there is no host-side broker refreshing the session: the
GUNIO_COOKIE you deploy with is it. When gun.io expires that session, reads
start failing until the deployment is updated with a fresh cookie. The
auth_status tool (or gunio auth status on the CLI) is how you detect this: it
performs one lightweight authenticated read and reports
{"mode": "cookie", "authenticated": false, "checked_at": "...", "error": "gun.io returned HTTP 401"}without ever raising raw errors or leaking cookie material. Phase 2 will add credential-based login; this release is transport + visibility only.
Develop
uv sync --extra dev
uv run --extra dev pytest -q # full suite
uv run gunio me # thin CLI (needs GUNIO_COOKIE or a logged-in browser)
uv run gunio-mcp # run the MCP server over stdioGUNIO_COOKIE is a sessionid=...; csrftoken=... string; the broker produces it, or set it by hand for local dev.
Layout
Path | Role |
| Safety-guarded HTTP client for |
| Pure tool helpers (reads + gated writes), unit-tested |
| FastMCP wrappers + |
| Thin read-only CLI |
| Cookie broker, wrappers, installer (lifted from claudesync) |
License
MIT.
Available Tools
24 toolscancel_interviewB
Cancel an interview. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| confirm | No | ||
| interview_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It reveals the preview behavior (read-only by default), which is critical for an agent. However, it does not disclose other important aspects like whether the cancellation is reversible, permissions required, or notifications triggered. The partial disclosure earns a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, with only 11 words. It is front-loaded and contains no unnecessary text. However, the brevity trades off clarity, particularly in explaining 'previews' and parameter roles.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a cancellation operation (no output schema, no annotations, missing parameter details), the description is incomplete. It does not clarify what 'previews' means exactly (e.g., what output is returned?), the impact of cancellation, or error conditions. More context is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate by explaining parameter meanings. It hints at the 'confirm' parameter role ('unless confirm=true'), but does not explain 'interview_id' or 'reason'. The description adds minimal value beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Cancel an interview.' The verb 'Cancel' and resource 'interview' are specific. The phrase 'Previews unless confirm=true' hints at a preview mode, but the primary action is clear. It is distinct from sibling tools like schedule_interview or reschedule_interview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage guidance: 'Previews unless confirm=true and writes are enabled.' This implies that by default it is a preview, and actual cancellation requires confirm=true and writes enabled. However, it does not explicitly state when to use this tool versus alternatives (e.g., rescheduling), nor does it mention any prerequisites or side effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_applicationB
Get a single job application by id.
| Name | Required | Description | Default |
|---|---|---|---|
| application_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'Get' which implies read-only, but does not disclose error handling, authentication requirements, or data freshness. For a simple getter, more transparency could be added.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the action. It contains no unnecessary words. However, it could be slightly expanded to include key context without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple getter with one parameter and no output schema, the description is minimally adequate. It does not mention return format, error cases, or typical usage context. More details would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description does not add meaning beyond the schema. However, the only parameter 'application_id' is self-explanatory in the context of getting an application. The description adds no extra details but the schema suffices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single job application by its ID. It uses a specific verb ('Get') and resource ('job application'), and distinct from siblings like list_applications (returns multiple) or update_application (mutates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing a specific application by ID, but provides no explicit guidance on when to use this tool versus alternatives like list_applications. No when-not-to-use or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityB
Freelancer availability / seeking state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden of behavioral disclosure. It only implies a read operation but does not explicitly state that it is read-only, nor does it mention any side effects, authentication requirements, or rate limits. The description is too minimal for safe agent usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded with the key purpose. It wastes no words and every character contributes to meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is adequate but incomplete. It tells what resource is returned but does not describe the structure or format of the response (e.g., boolean, object, string). An agent may need to infer or test to understand the exact output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (since there are no params). The description adds no parameter information, but that is acceptable because there are no parameters to document. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns freelancer availability and seeking state, which distinguishes it from sibling tools like get_me or get_freelancer_profile that cover broader profile information. However, it could be more explicit about what 'availability' entails (e.g., time slots or a boolean).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as when to use get_me or get_freelancer_profile instead. There is no mention of context, prerequisites, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_freelancer_profileB
Full freelancer profile: bio, experiences, skills, rates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions what fields are included but does not disclose behavioral traits like read-only nature, authentication requirements, or whether it returns the authenticated user's profile or a specific freelancer's profile (given no parameter for ID).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is both concise and informative. It clearly communicates the tool's purpose without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description is too brief. It fails to clarify important context such as the identity of the profile owner (e.g., does it always return the authenticated user's profile?), the output format, or any rate limits. With many sibling tools, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameters, and schema coverage is 100%. The description adds value by specifying the content of the profile (bio, experiences, skills, rates), which goes beyond the empty schema. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a full freelancer profile listing specific fields (bio, experiences, skills, rates). However, it does not differentiate from the sibling tool 'get_me', which might also return profile information, thus lacking sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the many sibling tools, such as 'get_me' or 'list_interviews'. There is no mention of prerequisites, when-not-to-use, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interviewC
Get a single interview by id.
| Name | Required | Description | Default |
|---|---|---|---|
| interview_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description does not disclose behavioral traits such as read-only nature, authorization needs, or potential errors. Simply states 'Get' but with no indication of side effects or restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it sacrifices clarity and completeness. It is under-specified rather than efficiently conveying necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (1 param, no output schema), the description is insufficient. It should at least mention what is returned (e.g., interview details) or any prerequisites (e.g., interview must exist).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, interview_id, has no schema description (0% coverage) and the tool description adds no meaning beyond its name. No guidance on format or where to obtain the ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get) and resource (single interview) and the identifier (by id). It distinguishes from list_interviews which returns multiple, but could be more specific about the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like list_interviews or cancel_interview. Given many sibling tools, explicit directions would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobA
Get a single job listing by id.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates a read operation ('Get') but does not disclose potential errors, authentication needs, rate limits, or confirm it is non-destructive. The tool is simple, so the description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 param, no output schema, no annotations). The description covers the action but omits return value expectations or error conditions. It is somewhat complete for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description only mentions 'by id' without explaining the job_id format, example, or constraints. It adds minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'a single job listing', and the method 'by id'. This directly addresses what the tool does and distinguishes it from sibling tools like search_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like search_jobs or list_applications. The description implies usage for retrieving a specific job by ID, but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meA
Current gun.io user: identity, contact, flags, embedded freelancer summary.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists returned data but does not disclose authentication requirements, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no waste. Every word is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema, the description is adequately complete, listing the data categories. Could mention authentication but not required given low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Description adds meaningful context about the returned fields beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current user's identity, contact, flags, and embedded freelancer summary. It distinguishes from sibling tools like get_freelancer_profile by specifying 'current' user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for the current user's own info, but no explicit when-to-use or alternatives mentioned. Sibling tools suggest other contexts but guidance is lacking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriptionsB
The user's notification subscription settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as whether it is read-only, requires authentication, or has any side effects. The description carries the full burden but only states the resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the resource without redundancy. It earns its place but could be slightly more informative about what the tool does (e.g., 'retrieve').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should clarify what is returned (e.g., list of subscriptions, statuses). It only mentions 'settings', which is vague for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the schema fully covers this aspect. The description adds context by specifying that it concerns 'notification subscription settings', which is sufficient for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool retrieves notification subscription settings for the user. It distinguishes from sibling tools like get_me or list_interviews by specifying 'subscription settings'. However, it uses a noun phrase instead of a verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Even though it's straightforward, the description does not mention prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workstyleC
The user's work-style preferences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no behavioral details beyond the noun phrase. The description fails to disclose that it is a read-only operation or any side effects. Fully reliant on agent inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, one sentence, no wasted text. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides insufficient context about the return format or behavior. It fulfills the bare minimum but leaves agents uninformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (no parameters), baseline is 3. The description adds minimal meaning by specifying 'user's work-style preferences,' which aligns with the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the user's work-style preferences, distinguishing it from siblings like get_me or get_freelancer_profile. However, it could be more explicit about the verb (e.g., 'retrieves').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like get_me or get_freelancer_profile. The agent is left guessing the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_statsB
Platform job stats (e.g. jobs published last week).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only says 'stats' without disclosing behavioral traits such as read-only nature, data freshness, or potential performance impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple stats tool with no parameters, but lacks details on what stats exactly are returned, time range, or access permissions. Could be more complete given the number of sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so baseline is 4. The description adds implicit context via the example, though no explicit parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool provides platform job stats with an example (jobs published last week). It is clear but does not explicitly distinguish from sibling tools like search_jobs or get_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_applicationsC
List the freelancer's job applications (with status and embedded job info).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions that results include status and embedded job info, but fails to disclose pagination behavior, ordering, or read-only nature. This leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise. However, it omits important details that could be included without significant length, such as pagination behavior. It is not optimally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description is incomplete. It does not explain how pagination works, what the output structure looks like, or how to interpret the status and embedded job info. More context is needed for an agent to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description does not mention the 'page' parameter at all. It adds no meaning beyond the schema, failing to compensate for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'the freelancer's job applications', with additional detail about status and embedded job info. It distinguishes from similar tools like get_application and list_interviews, but could be slightly more explicit about the scope (freelancer-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_hires or list_invites. The description does not mention when not to use it or provide context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hiresC
List the freelancer's active/past engagements (hires).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description gives minimal behavioral context: lists active/past engagements, but nothing about side effects, authentication, rate limits, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (7 words) but omits crucial parameter information, making it incomplete despite brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with optional pagination and no output schema, the description is too sparse. It doesn't clarify output format, pagination limits, or how to use the page parameter, leaving significant gaps for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one parameter 'page' with 0% schema description coverage. Description fails to mention or explain the page parameter, leaving the agent without guidance on its semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'list' and resource 'engagements (hires)', including scope 'active/past'. It effectively distinguishes from sibling tools like list_interviews or list_applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for viewing hires, but no explicit when-to-use or when-not-to-use guidance is provided. Sibling tools exist but no comparison given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interviewsB
List the freelancer's interviews, optionally filtered by status.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Optional status filter, e.g. ['PENDING','SCHEDULED']. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation ('List'), but provides no additional behavioral details such as pagination, ordering, authentication requirements, or rate limits. With no annotations available, more context would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter, the description is mostly adequate. However, it lacks details about the return format, ownership (e.g., authenticated freelancer), and default behavior (e.g., all statuses if filter omitted). Given the lack of output schema, more completeness would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'status' already has a clear description in the input schema (100% coverage). The description redundantly mentions filtering by status but adds no new semantic information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('freelancer's interviews'), and mentions optional filtering by status. However, it does not differentiate from sibling tools like 'list_mission_interviews' or 'get_interview', which might have overlapping scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'list_mission_interviews' or 'get_interview'. The description implies listing all interviews for the freelancer, but does not clarify prerequisites or contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invitesB
List inbound invites for the freelancer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose any behavioral traits such as pagination, authentication requirements, or whether it returns only pending invites. The description adds minimal context beyond the tool's basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single sentence with no unnecessary words. It is front-loaded and efficient, though it could include a bit more detail without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description should ideally mention what the response contains (e.g., a list of invite objects). It fails to provide this context, leaving the agent uncertain about the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is effectively 100%. The baseline for 0 parameters is 4, but given the simplicity, a 3 is appropriate as the description does not add any parameter-specific information, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'inbound invites', and specifies scope 'for the freelancer'. It is distinct from sibling tools like list_interviews or list_applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. No exclusions or context provided, leaving the agent to infer usage solely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mission_interviewsB
List the freelancer's mission interviews.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose any behavioral traits such as read-only nature, authentication requirements, or side effects. For a listing operation, it is reasonable to assume idempotency but it is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is to the point, but it could benefit from additional context about what 'mission interviews' are, without becoming verbose. It is concise but slightly under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of sibling tools like 'list_interviews', the description fails to distinguish this specific tool's purpose. There is no output schema, and the return value is not described. The tool is simple with no parameters, but the lack of context about the scope ('mission' vs general interviews) makes it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the schema, so the description does not need to add parameter information. The baseline score for zero parameters is 4, and the description is adequate though it adds no extra semantic context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and the resource (the freelancer's mission interviews), but it fails to differentiate this tool from its sibling 'list_interviews', which likely lists all interviews without the 'mission' qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'list_interviews' or other listing tools. An explicit when-to-use or when-not-to-use statement is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presentationsC
List client presentations for the freelancer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It merely states the action without any details on permissions, side effects, rate limits, or what the response contains. This is severely lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded. Every word adds value, with no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no parameters, no output schema, and no annotations, the description is too minimal. It does not explain what 'client presentations' are, how they are returned (e.g., list, paginated?), or any ordering. More context is needed for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters (100% coverage), so the description does not need to add parameter meaning. The baseline for no parameters is 4, and the description is adequate in this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'List client presentations for the freelancer,' which clearly identifies the verb and resource. However, it does not differentiate this tool from sibling list tools such as list_interviews or list_applications, leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., when a filter or specific criteria is needed). It lacks any when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reviewsC
List reviews the freelancer has received.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like read-only nature or scope, but it only says 'reviews the freelancer has received' without specifying whether they are only the freelancer's own reviews or all reviews involving the freelancer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but lacks necessary detail; it is concise but at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a simple parameter, the description fails to explain pagination, sorting, or what types of reviews are included, making it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'page' is not mentioned in the description, and schema description coverage is 0%. The description adds no value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'reviews the freelancer has received', distinguishing it from sibling tools like list_interviews or list_applications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., for filtering or specific review types) or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_interviewB
Reschedule an interview. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | ||
| interview_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description reveals preview behavior and the confirm flag. However, it does not disclose side effects on the original interview, required permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is remarkably concise with two sentences, front-loading the action. However, the phrase 'and writes are enabled' is ambiguous, slightly reducing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, output schema, and the presence of a nested object parameter, the description fails to explain what the body contains, what a preview yields, or the overall mutation effect. Significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description only clarifies the confirm parameter, leaving interview_id and the nested body object undefined. Insufficient compensation for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Reschedule' and the resource 'interview', distinguishing it from sibling tools like schedule_interview and cancel_interview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via the preview vs. write behavior, but lacks explicit guidance on when to use this tool versus alternatives or prerequisites (e.g., interview must be scheduled).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
respond_to_inviteC
Respond to an invite. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | ||
| invite_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions preview behavior unless confirm=true and writes enabled, but lacks details about effects of preview, what writes occur, or what enables writes. No annotations to supplement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (two sentences), which is concise but sacrifices necessary detail. It vaguely communicates the core action but omits parameter semantics and usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters (one complex), no output schema, and no annotations, the description is gravely incomplete. It doesn't explain return values, errors, or the full range of behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should clarify parameters. It only indirectly references confirm. No explanation of invite_id or body (which is a freeform object). This is insufficient for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (respond to an invite) and hints at a two-phase process (preview vs confirm). However, it does not specify what 'respond' entails (e.g., accept/decline or send a message) nor differentiate from similar actions like updating an application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool over siblings like list_invites or update_application. No context about prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_interviewB
Schedule an interview. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| confirm | No | ||
| interview_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses that the tool previews by default and only writes when confirm=true and writes are enabled. This is a key behavioral trait, though it omits other side effects like idempotency or error cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence), which is front-loaded with purpose and key condition. However, it is under-specified for a tool with three parameters, one being a complex nested object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three parameters, no output schema, and a nested body object, the description is incomplete. It lacks parameter descriptions, return value details, error states, and context relative to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add meaning. It explains the confirm parameter's role, but provides no information about the interview_id (required) or the body (required nested object with additionalProperties), leaving significant ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it schedules an interview, using the verb 'schedule' and resource 'interview'. It distinguishes from siblings like reschedule_interview and cancel_interview, but the conditional preview behavior adds slight ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only explains when the preview vs actual write occurs via the confirm parameter, but provides no guidance on when to use this tool versus alternatives like reschedule_interview or list_interviews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_jobsC
Search open gun.io job listings.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search query. | |
| page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states 'search' with no disclosure of return format, pagination behavior, authentication needs, or rate limits. This is a significant gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence description is concise but under-specified. It is not front-loaded with critical details; the brevity sacrifices utility. An adequate length for a minimal description but lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no output schema, and 22 sibling tools, the description is insufficient. It does not explain return values, pagination, or how 'q' filters results, leaving the agent with too many unknowns for reliable use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (q described, page not). The description adds no meaning beyond the schema; it does not clarify how to use 'q' (e.g., fields searched) or 'page' (e.g., starting from 1? 0?). Fails to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search open gun.io job listings' clearly identifies the verb (search) and resource (job listings), and distinguishes this tool from siblings like get_job (single job) or list_applications (applications) by focusing on searching open listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., get_job, list_interviews). No mention of prerequisites or typical scenarios, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_applicationB
Patch a job application. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | ||
| confirm | No | ||
| application_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the preview-before-write behavior and the conditional write, which are key behavioral traits. Lacks details about what gets destroyed or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, minimal waste. Verb and resource are front-loaded. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits important context: what fields the patch object accepts, the response format, conditions for 'writes enabled,' and error scenarios. A more complete description would help agents use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description adds no meaning to any parameter. The patch object with additionalProperties: true is left completely unexplained, making it hard for an agent to know what values to provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (Patch) and resource (job application). The phrase 'Previews unless confirm=true and writes are enabled' adds context that distinguishes it from other application tools like withdraw_application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage context: preview by default, write only when confirm=true and writes enabled. However, no explicit guidance on when to choose this over other tools or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_profileA
Patch the freelancer profile. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | ||
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavioral traits: default preview mode, write only when confirm=true and writes enabled. This provides useful context beyond basic mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is single-sentence and front-loaded with the key action. It is concise but could add a brief note on patch format without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers preview/write behavior and confirm parameter but omits details on the patch object structure, which is critical given no output schema and nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains the confirm parameter but does not describe the structure or permissible keys of the patch object, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Patch' and the resource 'freelancer profile', distinguishing it from sibling tools like get_freelancer_profile (read) and update_application (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for patching profiles and mentions confirmation behavior but does not provide explicit when-to-use or when-not-to-use guidelines nor contrast with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdraw_applicationB
Withdraw a job application. Previews unless confirm=true and writes are enabled.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| confirm | No | ||
| application_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses the preview-first behavior and the need for confirm=true to execute, which is helpful. However, it fails to mention whether the operation is reversible, permission requirements, or effects on related data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, with the key action front-loaded. However, it sacrifices parameter details that could be included without significant verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, error handling, or parameter roles, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain any of the three parameters (application_id, reason, confirm). It only references confirm indirectly via 'confirm=true', leaving the agent with no semantic context for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Withdraw a job application' with a specific verb and resource. It distinguishes from siblings like update_application and cancel_interview by the action type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like update_application or cancel_interview. The description implies that actual withdrawal requires confirm=true and writes enabled, but does not clarify when preview mode is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
24 tool updates
v0.1.0- First observed
cancel_interview - First observed
get_application - First observed
get_availability - First observed
get_freelancer_profile - First observed
get_interview - First observed
get_job - First observed
get_me - First observed
get_subscriptions - First observed
get_workstyle - First observed
job_stats - First observed
list_applications - First observed
list_hires - First observed
list_interviews - First observed
list_invites - First observed
list_mission_interviews - First observed
list_presentations - First observed
list_reviews - First observed
reschedule_interview - First observed
respond_to_invite - First observed
schedule_interview - First observed
search_jobs - First observed
update_application - First observed
update_profile - First observed
withdraw_application
TDQS
Scored across 24 tools
Most tools target distinct resources (user, profile, interviews, applications, etc.), but 'list_interviews' and 'list_mission_interviews' could cause confusion; descriptions help clarify.
Predominantly uses verb_noun pattern (list_, get_, update_, etc.), with minor deviations like 'get_me' and 'job_stats' being slightly off-pattern.
24 tools is above the typical range but still reasonable for a comprehensive freelance platform client; each tool serves a distinct purpose without being excessive.
Covers core freelancer workflows (profile, applications, interviews, invites, hires, job search), but lacks tools for messaging or payment tracking which might be relevant.
Maintenance
Related MCP Connectors
Public MCP server for discovering open jobs. Search, filter, and get application links.
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
OAuth-protected, read-only-by-default MCP server for provenance-labeled QuillCaddie project memory.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for programmatically accessing your own Toptal Talent profile, including profile management, applications, jobs, timesheets, and more.AGPL 3.0
- AlicenseAqualityFmaintenanceMCP server for Upwork via browser automation. Enables Claude Code to search jobs, manage proposals, messages, and contracts on Upwork.1869Apache 2.0
- FlicenseAqualityDmaintenanceA local job-hunting MCP server for discovering jobs across pluggable web sources, tracking applications through a status lifecycle, and managing profiles/resumes, with geo/map-region search.12-
- AlicenseNot gradedqualityCmaintenanceLocal-first MCP server for research on AI-assisted browsing of a user-owned professional-network account (e.g., LinkedIn), providing read-focused tools such as profile, company, search, and feed reads.MIT