Dreamwork MCP Server
OfficialThis MCP server exposes Dreamwork's job-search platform to AI agents, with free public browsing and authenticated account workflows.
Browse/search public job listings, view full listing details, market pulse, top hiring companies, platform context, and upgrade links without a key.
With an API key, manage ranked matches, saved jobs, dismissals, pipeline cards, imported jobs, and applications made elsewhere.
Prepare and edit tailored resumes, cover letters, answers, and application packs; inspect readiness, documents, download links, and generated materials.
Apply to roles, cancel in-flight applications, configure/run Autopilot, prepare multiple applications, and check plan usage.
Read recruiter conversations and unread mail, mark messages read, and send replies with explicit confirmation.
Manage profile details, resume uploads, job preferences, communication preferences, career records, and hypotheses.
Track application status/timelines, interviews, stats, tasks, changes since a timestamp, and undo reversible actions.
Use hosted HTTP or stdio MCP with guest mode or scoped API keys (
read,write,apply,send); consequential actions require confirmation tokens.Use built-in prompts for morning briefs, finding/preparing roles, applying, interview prep, and Autopilot setup.
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., "@Dreamwork MCP Serverfind remote product manager jobs and save the best five to my pipeline"
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.
Dreamwork's public MCP source lives here. The client calls the hosted Dreamwork API; it does not include the API, database, workers, or hosted OAuth service.
Connect over HTTP at https://mcp.dreamworkhq.com/mcp, or run the stdio client
with npx -y @dreamworkhq/mcp. Public job browsing works without a key.
For source development, use Node 22 and pnpm 10.23.0:
pnpm install --frozen-lockfile
pnpm check
pnpm test
pnpm build
pnpm test:packageThe MCP client is in apps/mcp. packages/api-contracts and
packages/assistant-contracts contain its source dependencies; they are bundled
into the published CLI. source-export.json records the release's source commit.
See CONTRIBUTING.md for how changes reach a release.
@dreamworkhq/mcp
MCP server for Dreamwork: job-search tools for AI agents. Any MCP client (Claude Desktop, Cursor, the MCP Inspector) can use it to find roles, rank them, tailor applications, apply, and track outcomes for one person over time.
This server is a thin gateway: it calls the Dreamwork API over HTTPS and holds no database access of its own. Transport is stdio, and stdout carries only JSON-RPC frames.
Install
There is no install step. MCP clients run it on demand with npx. The examples below use npx -y @dreamworkhq/mcp.
No key or account is needed to start. Without DREAMWORK_API_KEY the server
runs in free guest mode, where your agent can search and read every listing.
The env blocks below are optional; add a key when you want the account
tools (see Guest mode and API keys).
Related MCP server: Civify MCP Server
Configure
Claude Desktop
Add an entry to your claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"dreamwork": {
"command": "npx",
"args": ["-y", "@dreamworkhq/mcp"],
"env": {
"DREAMWORK_API_KEY": "sk_..."
}
}
}
}Restart Claude Desktop after editing. Put credentials in the env block. Do not
wrap command in a shell or an env-loader such as dotenvx run -- …: on a stdio
server, any banner the wrapper prints to stdout corrupts the JSON-RPC stream and
hangs tool calls.
Cursor and other clients
Any stdio MCP client works. Cursor uses the same config shown above: point the
command at npx -y @dreamworkhq/mcp and pass DREAMWORK_API_KEY in the
environment. To check the setup with the Inspector:
DREAMWORK_API_KEY=sk_... npx @modelcontextprotocol/inspector npx -y @dreamworkhq/mcpHosted endpoint
Dreamwork also serves these tools over Streamable HTTP at
https://mcp.dreamworkhq.com/mcp. In claude.ai, Claude Desktop, or ChatGPT,
add that URL as a custom connector and sign in to Dreamwork. There is nothing
to install and no key to paste. The consent screen asks which scopes the
connector gets.
Clients that set request headers can send an API key to the same URL instead. In Claude Code:
claude mcp add --transport http dreamwork https://mcp.dreamworkhq.com/mcp \
--header "Authorization: Bearer sk_..."Guest mode and API keys
Guest mode is free and needs no account. With no key set, the server starts in
guest mode and exposes the public, read-only tools: browse_listings,
get_listing, get_platform_context, and get_upgrade_link. The server tells
the agent it is in guest mode, so the agent can say what works now. Account
tools answer with a short "No API key" message that lists the steps to get one.
The hosted endpoint does the same for its handshake. initialize and
tools/list succeed with no sign-in, and those four tools run. Every account
tool, and any other method, answers 401 with WWW-Authenticate so a
connector can sign in with OAuth. A bearer the API rejects is that same 401.
An API key needs a free account. Matches ranked against your resume, saved jobs,
tailored materials, the pipeline, recruiter mail, and applying need an API key.
Any Dreamwork account can generate one, including the free plan. Your plan sets
the key's rate limit and usage allowances. Sign in at
dreamworkhq.com, open Profile, then MCP (or use
the Get a key button on the Agents page), then set the key as
DREAMWORK_API_KEY (format sk_...) and restart your MCP client.
When you generate a key you choose what it may do: read, write, apply, send mail. The profile page starts with all four selected; uncheck anything your agent should not do. A key can do less than you can, never more.
Environment variables
Variable | Required | Default | Purpose |
| For account tools | none | API key ( |
| No |
| Override the API endpoint (local dev / self-host). |
| No | on |
|
JOBLESS_API_TOKEN and JOBLESS_API_URL are still accepted as backward-compatible
aliases for DREAMWORK_API_KEY and DREAMWORK_API_URL; prefer the DREAMWORK_
names for new configs.
Telemetry
To measure usage, the server generates an anonymous random install id (a
UUID) on first run and stores it under your OS state directory
($XDG_STATE_HOME/dreamwork/install-id, ~/.local/state/dreamwork/install-id on
Linux/macOS, or %LOCALAPPDATA%\dreamwork\install-id on Windows). It is a random
value, never derived from your hostname, username, or any machine attribute. It
counts unique installs of guest (unauthenticated) usage. It is written at
runtime on your machine, never at build or publish time.
Opt out by setting either environment variable:
DREAMWORK_TELEMETRY=0(alsofalse/no/off)DO_NOT_TRACK=1(the standard opt-out; alsotrue/yes/on)
With telemetry disabled, no install id is generated, read, or sent.
Tools
The typical flow: browse the public index, save roles to the pipeline, tailor
materials, apply, then track replies and interviews. Call
get_platform_context first. It describes what Dreamwork can do, so the agent
picks the right workflow.
Public (no key):
browse_listings, get_listing, get_market_pulse, get_platform_context, get_top_hiring_companies, get_upgrade_link
Assistant actions: one tool per capability in Dreamwork's assistant registry, each running through the same authorization ladder and receipt ledger the on-site assistant uses. A consequential one holds on its first call, answering with a summary and a confirmationToken; send that token back with identical arguments to go ahead.
answer_application_questions, apply, cancel_apply, confirm_hypothesis, dismiss_application_questions, dismiss_match, edit_answer, edit_cover_letter, edit_resume, forget_hypothesis, format_resume, generate_pack, get_application_documents, get_application_questions, get_application_readiness, get_application_status, get_autopilot_settings, get_autopilot_status, get_career_record, get_communication_preferences, get_inbox, get_job, get_pack_status, get_pipeline, get_preferences, get_resume_download_link, get_resume_work_history, get_task, get_unread_reminders, get_updates_since, get_usage, import_job, list_dismissed_matches, list_matches, list_tasks, mark_applied_offsite, mark_messages_read, move_pipeline, parse_preferences_text, prepare_applications, remember_hypothesis, replace_application_document, reply_to_recruiter, restore_match, restore_material, save_application_answers, save_job, set_autopilot, start_checkout, strengthen_application, undo_last, update_autopilot_settings, update_communication_preferences, update_preferences
Direct product tools: routes with no registry action behind them.
add_contact, add_jobs, generate_outreach, generate_resume, get_application_materials, get_generated_resumes, get_profile, get_stats, list_contacts, list_interviews, reopen_application_materials, update_application_materials, update_profile, upload_resume
The server also offers five prompts, which hosts such as Claude Desktop and
Claude Code show as commands: morning_brief (what changed since you last
checked), find_and_prepare (search, pick, prepare materials),
apply_to_prepared (fill any missing answers, review, apply with
confirmation), interview_prep, and autopilot_setup.
Notes on a few tools:
No tool sends mail or submits an application on its first call.
apply,reply_to_recruiter,set_autopilot,update_autopilot_settingsandstart_checkoutreturnheldwith a summary and aconfirmationToken, and act only when you send that token back with identical arguments.1.3.0 removed the 1.2.0 tools a registry action replaced:
search_jobsandlist_applications(useget_pipeline;browse_listingssearches the index),apply_to_job(apply),add_listing_to_pipeline(save_job),skip_job(dismiss_match), andsend_outreach. Replies and resubmissions go throughreply_to_recruiterandapply.Releases after 1.5.1 no longer include
list_escalationsandresolve_escalation, and the hosted server no longer offers them. Dreamwork no longer hands an application back to you as an escalation, so there is nothing for them to list or resolve.update_application_materialsandreopen_application_materialsare open to the Applications rollout cohort the API admits; outside it they return the API's own refusal.get_statsaggregates the signed-in candidate's own pipeline, so it needs a key like the rest.
Key scopes
An API key carries scopes, chosen when you generate it:
Scope | What it unlocks |
| Every read action: matches, pipeline, inbox, status, usage, receipts |
| Cheap and queued writes: save, dismiss, move, edit materials, preferences, checkout links |
| Submitting an application, cancelling one that is still sending, and Autopilot |
| Mailing a recruiter |
A scope gates every path to the act, direct routes included.
write is the floor for changing anything: a key without it is refused on any
request that is not a GET, HEAD, or OPTIONS, so a read key cannot rewrite
a profile or move the board by calling the route directly. A key without
apply is refused at apply, and also at
POST /jobs/:id/apply, the turbo-apply routes and the escalation routes. A key
without send is refused at reply_to_recruiter, at
POST /outreach/send and at POST /conversations/:id/reply. A direct call
answers 403 with
api_key_scope_required, the scope it wants, and a message saying what to do;
an assistant action answers action_not_authorized with the same next step.
A key can never manage keys, rotate the session token, or delete the account.
Those answer 403 session_required whatever it holds.
The profile page preselects all four scopes, and a key request that names no scopes gets read and write. A key created before scopes existed keeps everything it could already do.
Troubleshooting
Tool calls hang / time out, but the handshake succeeds. Something is writing non-JSON-RPC bytes to stdout. Make sure
commandisn't wrapped in an env-loader or shell that prints a banner, and update to the latest version (npx -y @dreamworkhq/mcp@latest; clear the npx cache withrm -rf ~/.npm/_npxif an old build is cached). stdout must carry only protocol frames. All server logging goes to stderr.Every account tool says "No API key".
DREAMWORK_API_KEYisn't reaching the process. Confirm it's in theenvblock of your client config.Every account tool says "API key rejected". The key reached the server, but it has expired or been revoked. Create a new one under Profile, then MCP, replace
DREAMWORK_API_KEYwith it, and restart your MCP client.Apply returns
missing_onboarding_fieldsormissing_profile_fields. The tool reports the missing fields and the Dreamwork path that fixes each one. Complete those details in Dreamwork before retrying; the failed request has not started an application.
Development
pnpm --filter @dreamworkhq/mcp check # typecheck
pnpm --filter @dreamworkhq/mcp build # emit dist/
pnpm --filter @dreamworkhq/mcp test # unit testsThe stdio entrypoint is src/stdio.ts; tool definitions live in
src/mcp.ts; the HTTP API client is src/client.ts.
The server reads configuration from the process environment only. It does not
load a .env file. For local development export the vars in your shell (e.g.
DREAMWORK_API_URL=http://127.0.0.1:3000 pnpm --filter @dreamworkhq/mcp stdio).
Package-boundary decisions, tool-registration conventions
(registerDreamworkTool), error/versioning rules, and deferred review triggers
are recorded in ARCHITECTURE.md. The tool catalog above is
drift-checked against the registered tools by test/tool-catalog.test.ts.
License
MIT
Available Tools
71 toolsadd_contactAdd contactCInspect
Adds a recruiter or referrer contact to the account using the supplied contact details.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Contact name | |
| No | |||
| title | No | Job title | |
| company | Yes | Company | |
| linkedinUrl | No | LinkedIn URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation profile is covered. The description adds nothing behavioral — no statement about duplicate handling, whether the contact is idempotent, or what side effects follow from adding.
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?
One front-loaded sentence with the verb and resource first. The trailing clause 'using the supplied contact details' is near-filler, keeping it out of the top band.
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 5-parameter mutation with no output schema, the description covers the basic purpose but omits duplicate/existence behavior and whether any identifiers are returned. Annotations carry the safety profile, so the minimum viable bar is met but not exceeded.
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 100%, so every parameter is already documented in the schema and the baseline is 3. The phrase 'using the supplied contact details' adds no syntax, format, or required-field meaning 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?
States a specific verb and resource ('Adds a ... contact to the account') and narrows the scope to recruiter/referrer contacts, which is more than a restatement of the name. It doesn't explicitly distinguish itself from the sibling list_contacts, but the add-vs-list split is self-evident.
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 when-to-use guidance, no prerequisites, and no mention of the sibling list_contacts for checking existing contacts or handling duplicates. The only usage signal is the implied scope ('recruiter or referrer'), which is not the same as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_jobsAdd job manuallyAInspect
Adds a job to the account's private pipeline using title, company and optional description, URL, contact email and application method. For eligible accounts, a new job can also create and queue its application materials, using pack allowance. No application is submitted.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| title | Yes | Job title | |
| company | Yes | Company name | |
| description | No | ||
| contactEmail | No | ||
| applicationMethod | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing real side effects: the job lands in a 'private pipeline,' eligible accounts trigger creation/queuing of application materials, and this consumes 'pack allowance' (a quota/cost signal). It also clarifies nothing is submitted. It stops short of explaining eligibility criteria or auth needs, but this is materially more than destructiveHint=false provides.
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?
Three sentences, front-loaded with the core action and fields, followed by the eligibility/pack-allowance side effect and the non-submission boundary. No filler; each sentence adds a distinct fact.
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 mutation tool with no output schema and thin param coverage, the description supplies the missing behavioral layer (scope, side effects, quota, non-submission). It omits duplicate handling, auth, and return shape, but covers what an agent needs to call it deliberately.
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 only 33% schema description coverage, the description compensates by enumerating all six inputs and signaling optionality ('title, company and optional description, URL, contact email and application method'). It doesn't explain the applicationMethod enum values, but the schema already carries that enum.
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?
States a clear verb+resource ('Adds a job to the account's private pipeline') and names the fields it accepts. However, it never distinguishes itself from close siblings like save_job or import_job, leaving the agent to infer the 'manual' vs 'save/import' distinction from the title alone.
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?
There is implicit routing value in 'No application is submitted,' which separates this tracking action from apply/prepare_applications. But it offers no explicit when-to-use condition or named alternative (save_job, import_job, browse_listings), so usage remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
applyApply to a jobADestructiveInspect
Submits one application to an employer under the account holder's name using the saved materials at expectedRevision. Submission requires existing materials and plan allowance and cannot be recalled. A confirmation hold returns the destination, material summary and a token bound to identical arguments; the reviewed revision is enforced.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | ||
| expectedRevision | Yes | The materials revision the person reviewed. A mismatch fences the send. | |
| confirmationToken | No | Echo the token from a previous `held` result to carry out the act it described, and only after the person has seen that result's summary and agreed to it. Send identical arguments: the token is bound to the exact call it was issued for, so a changed argument is held again with a fresh token and a fresh summary. It lasts two minutes and is spent once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare destructiveHint=true and openWorldHint=true, the description adds substantial context beyond them: submission 'cannot be recalled', it needs pre-existing materials and plan allowance, a mismatch on expectedRevision 'fences the send', and the confirmation hold is a real two-phase protocol with a token bound to identical arguments. That is exactly the behavioral texture an agent needs for an irreversible action.
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?
Three dense sentences with the core action front-loaded and no filler; each sentence carries new constraints (preconditions, irreversibility, hold/token protocol). The middle sentence is long but every clause earns its place.
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 destructive, open-world tool with no output schema, the description covers preconditions, irreversibility, and the shape of the held result (destination, material summary, token). It stops short of describing the successful-submission outcome or failure modes, which is a minor remaining gap.
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 67% schema coverage, only applicationId is undocumented in the schema. The description compensates by explaining that materials are taken at expectedRevision and that the token is bound to identical arguments, adding meaning over the schema text rather than repeating it.
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?
States a specific verb and resource ('Submits one application to an employer') plus the key scoping detail ('using the saved materials at expectedRevision'), which distinguishes it from preparation-oriented siblings like prepare_applications and strengthen_application. It does not, however, name or exclude any sibling explicitly, so an agent must infer the boundary itself.
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?
It conveys implied prerequisites ('requires existing materials and plan allowance') and the two-phase hold/confirm flow, which tells the agent the call is not a one-shot. But it never says when to reach for this tool instead of alternatives such as mark_applied_offsite, cancel_apply or generate_outreach, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_listingsBrowse job listingsARead-onlyInspect
Returns indexed listings filtered by title or company keywords, function, seniority, work setting, location, pay, benefits, industry, AI role, internship and posting or discovery age. Anonymous browsing is supported. A page holds 25 listings by default and limit accepts up to 100, which the API clamps to 25 without a key or when the account's plan caps it there; the next page is the previous nextCursor. An unsorted cursor walk is stable and uncapped; sorted walks stop at 1,000. nextCursor requires identical filters and sort; null ends the walk. addedAfter supports overlapping discovery windows because listings can become servable after first discovery. Each listing's url is its Dreamwork page; sourceUrl is the employer's direct posting. Pay filters use whole annual US dollars and match posted bands reaching the bound, rather than guaranteed pay.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order. Omit it to walk every match in a stable, unranked order; any sort stops the walk at 1,000. | |
| bonus | No | Only postings offering a bonus. | |
| limit | No | Page size, 25 when omitted. Without a key, or when the account's plan caps it, the API returns at most 25. | |
| aiRole | No | AI-focused roles only. | |
| cursor | No | `nextCursor` from the previous page. Send the same filters and sort, or it is refused. | |
| equity | No | Only postings offering equity. | |
| remote | No | Shorthand for workSettings ["remote"]. | |
| search | No | Words in the job title or company name. | |
| company | No | Company name or domain. | |
| function | No | Job functions to keep, as a union. | |
| industry | No | Employer industry. One of: Software & Technology, Financial Services, Insurance, Healthcare & Hospitals, Pharma & Biotech, Consulting & Professional Services, Retail & Consumer Goods, Manufacturing & Industrial, Media & Entertainment, Education, Government & Public Sector, Nonprofit & NGO, Energy & Utilities, Telecommunications, Transportation & Logistics, Real Estate & Construction, Aerospace & Defense, Hospitality & Travel, Agriculture & Food, Legal, Marketing & Advertising, Other. | |
| location | No | City, region, or country. Remote roles open to that country match too. A place Dreamwork cannot resolve is refused. | |
| maxSalary | No | Pay ceiling in whole annual US dollars. | |
| minSalary | No | Pay floor in whole annual US dollars, e.g. 200000. A listing passes when its posted band reaches it; listings with no posted pay drop out. | |
| seniority | No | Seniority levels to keep, as a union. | |
| addedAfter | No | Only listings Dreamwork first saw after this ISO date-time. | |
| healthcare | No | Only postings offering healthcare. | |
| internship | No | Internships, co-ops, and apprenticeships only. | |
| workSettings | No | Work settings to keep, as a union. A posting that states none counts as onsite. | |
| postedWithinDays | No | Employer posting date within this many days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| total | Yes | Matching listings counted up to 1,000 for a sorted walk; null for an unsorted walk, which is not counted. |
| listings | Yes | |
| pageSize | Yes | Rows this page was allocated by the API after plan clamping; advance a sorted walk by this, never by the rows received. |
| nextCursor | Yes | Pass it back with the same filters for the next page; null means done. |
| totalCapped | Yes | |
| appliedFilters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, closed-world behavior, but the description adds substantial operational detail: anonymous browsing, 25-item default and clamping, stable uncapped cursor walks versus 1,000-item sorted walks, cursor/filter coupling, and overlapping addedAfter discovery windows. This is rich behavioral disclosure beyond structured fields.
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 purpose and filter scope are front-loaded, followed by dense but relevant pagination and cursor rules. No sentence is pure filler, though the description is long and a few clauses duplicate schema wording.
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?
An output schema exists, so return values need not be explained. For a 20-parameter search tool, the description covers anonymous access, page size and clamping, cursor reuse requirements, sort walk limits, and pay matching semantics—everything an agent needs to invoke 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?
Schema description coverage is 100%, so the schema already documents all 20 parameters. The description adds some meaning for pay-band matching and addedAfter overlapping windows, but much of its parameter-related text restates what the schema already says, making 3 the correct baseline.
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?
States a specific verb ('Returns') and resource ('indexed listings') and enumerates the filter scope. It is clearly a search/browse operation, but it does not explicitly contrast itself with siblings such as get_listing or list_matches, so it falls short of 5.
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?
Provides clear context for filtered browsing, anonymous access, and cursor-based paging. However, it never says when to use this instead of list_matches/get_listing or gives any when-not conditions, so it stops at clear context without alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_applyCancel an application that is still sendingADestructiveInspect
Stops a queued or in-progress application when submission can still be prevented. Already submitted applications cannot be recalled; the receipt reports that boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real context beyond that: the exact state boundary at which cancellation is impossible and the fact that the receipt reports that boundary, which is meaningful for a destructive operation.
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, no filler, with the state constraint front-loaded and the failure boundary second. Every clause carries 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?
An output schema exists, so return values need not be explained, and the description still gestures at the receipt. For a one-parameter destructive tool the description is nearly complete; only the parameter's own semantics are unaddressed.
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 would need to compensate, and it does not mention applicationId at all. The single parameter is self-explanatory by name, which keeps this at a baseline 3 rather than lower.
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?
States a specific verb (stops/cancel) plus the resource and its state (queued or in-progress application), so the action is unambiguous. It implicitly contrasts with the apply sibling by scoping itself to applications where submission can still be prevented, but never names an alternative tool.
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?
Gives a clear when-to-use condition (queued or in-progress, submission not yet sent) and an explicit when-not condition (already submitted applications cannot be recalled). No alternative tool is named for the submitted case, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_hypothesisConfirm a guessADestructiveInspect
Promotes a stored hypothesis after the person confirms it, then deletes the hypothesis. A stated refusal becomes a matching deal-breaker; other confirmations become work-vault notes that do not filter matches. The receipt identifies which record changed.
| Name | Required | Description | Default |
|---|---|---|---|
| hypothesisId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state destructiveHint=true/readOnlyHint=false. The description goes well beyond that, disclosing the delete-after-promote side effect, the branching outcome for a refusal (becomes a deal-breaker) vs other confirmations (become work-vault notes that do not filter matches), and the receipt behavior. This is exactly the kind of behavioral context a mutation tool needs.
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?
Three tight sentences that are front-loaded with the core action, then branching semantics, then return info; little waste. Minor redundancy in the final sentence, since an output schema already exists to describe the receipt.
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 single-parameter mutation with annotations covering the destructive profile and an output schema covering the return value, the description supplies the essential branching and side-effect context. The remaining gap is the undocumented hypothesisId semantics, which is not compensated for anywhere.
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% and there is a single required hypothesisId, yet the description never says what the id refers to, its format, or where to obtain it (presumably from remember_hypothesis). With low coverage the description should compensate and does not, leaving the one parameter undocumented everywhere.
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 gives a specific verb (promotes) and resource (a stored hypothesis) and adds the defining behavior (deletes the hypothesis afterward), so an agent can tell what it does. It does not name sibling hypotheses tools like remember_hypothesis/forget_hypothesis, so sibling differentiation is only implicit.
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 phrase 'after the person confirms it' implies the situational context and 'A stated refusal becomes a matching deal-breaker; other confirmations become work-vault notes' hints at branch outcomes, but there is no explicit when-to-use vs when-not guidance or named alternative for storing/forgetting hypotheses. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dismiss_matchDismiss a matchADestructiveInspect
Hides one role, every listing with the same employer and title in any location, from the account's match feed, job alerts and Autopilot until the account restores or saves it. The receipt offers undo for one minute; restore_match reverses it at any time and list_dismissed_matches lists dismissed listings. The supplied reason is not stored. It does not hide other roles from the same company and does not move or remove an existing pipeline card.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Listing id from the feed or `list_matches`. | |
| reason | No | The person's own words for why this role is wrong. Accepted but not stored, and it does not change later matches. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description earns that by spelling out exactly what becomes hidden, across which surfaces, and how long the undo window lasts. It further discloses that the supplied reason is not stored and does not affect later matches, and it bounds the blast radius by listing what is untouched.
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?
Front-loaded with the core action and its scope, then the recovery paths, then the exclusions — a logical order with no filler sentences. It is dense (four clauses of surface names) but every clause carries distinct information, so it stays on the right side of 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?
For a destructive mutation with only two parameters and an output schema that covers the receipt/return, the description supplies the remaining essentials: blast radius, reversal path, and explicit non-effects. Nothing an agent needs to decide or call correctly is missing.
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% and the schema already documents both jobId and reason, including the 'accepted but not stored' note. The description restates that the reason is not stored, adding emphasis but little new information; the useful nuance about matching scope belongs to behavior rather than parameters. Baseline 3 is appropriate when the schema does the work.
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?
States a specific verb (hides) and resource scope (one role plus every listing with the same employer and title in any location) and names the exact surfaces affected: match feed, job alerts, Autopilot. It is clearly separable from restore_match and list_dismissed_matches, which are named as the inverse and the list view.
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?
Explicitly routes: restore_match reverses it at any time, list_dismissed_matches lists dismissed listings, and the receipt's one-minute undo window is called out as the immediate reversal path. It also gives negative guidance — it does not hide other roles from the same company and does not move or remove a pipeline card — which removes the most likely mis-invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_answerEdit one application answerADestructiveInspect
Revises one employer-question answer identified by questionId; other answers and documents remain unchanged. This edits application prose rather than the account's factual screening, work-authorization, compensation or availability settings.
| Name | Required | Description | Default |
|---|---|---|---|
| questionId | Yes | ||
| instruction | Yes | ||
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| receipt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/overwrite nature is covered. The description earns credit for adding blast-radius context beyond that: only the identified answer changes while 'other answers and documents remain unchanged', and it explicitly disclaims touching account settings. Missing is whether the change is reversible (an undo_last sibling exists) or what permissions are needed.
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, no filler. The core action and its granularity are front-loaded, and the second sentence is a compact scope exclusion rather than padding.
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?
An output schema exists, so return values need no explanation, and the destructive/scope profile is well covered between annotations and text. The remaining gap is the semantics of the instruction parameter and any reversibility note for a destructive edit — minors against an otherwise complete picture.
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 carries the burden. It clarifies that questionId selects one employer question and that the edit is scoped to a single answer, which adds meaning. It says nothing about applicationId's role or, more importantly, what 'instruction' contains — a directive to be interpreted versus replacement prose — which is the highest-risk ambiguity here.
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?
States a specific verb and resource — 'Revises one employer-question answer identified by questionId' — and pins the granularity to a single answer. It also carves out what it is NOT (account-level factual screening, work-authorization, compensation, availability settings), which separates it from the settings siblings (update_preferences, update_autopilot_settings). It stops short of naming the closest sibling (save_application_answers) for a bulk-save case.
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 second sentence gives an implicit when-not by excluding account fact settings, so an agent can rule out the wrong tool family. But there is no explicit guidance on when to pick this over save_application_answers (bulk) or edit_cover_letter/edit_resume, and no prerequisites or ordering constraints are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_cover_letterEdit the cover letterADestructiveInspect
Revises an existing application's cover letter using the supplied instruction. scope can identify a paragraph or selected passage. Without scope, the targeted passage is located from the instruction; a whole-letter instruction revises the whole letter. Existing materials are required.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| instruction | Yes | What to change, in the person's words. | |
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| receipt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description adds the prerequisite ('existing materials are required') and the scope-resolution fallback behavior, but never states whether the previous letter text is overwritten or recoverable — a relevant omission for a destructive edit. Useful additions, but not rich.
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?
Four tight sentences with no filler; the core action is stated first and the scope-resolution rules follow in the order an agent would need them. Slightly dense, but nothing is wasted.
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?
An output schema exists so return values need no explanation, and the description covers the main ambiguity (scope vs. no scope) plus the prerequisite. The gap is the unmentioned section/answer scope kinds, which could lead an agent to believe only two target types exist for this non-trivial oneOf parameter.
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 only 33%, so the description must compensate, and it partially does by explaining scope's role and the no-scope fallback. However it describes scope as covering only 'a paragraph or selected passage', omitting the 'section' and 'answer' variants the schema's oneOf defines, leaving the parameter semantics incomplete.
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?
States a specific verb (revises) and resource (an existing application's cover letter) plus the mechanism (supplied instruction). The resource alone separates it from edit_resume and edit_answer among the siblings, so an agent can route without opening the schema.
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?
Explains the key conditional: a scope targets a paragraph/passage, no scope means the passage is inferred from the instruction, and a whole-letter instruction rewrites everything. It also states the prerequisite (existing materials required). No explicit sibling alternatives or exclusions are named, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_resumeEdit the tailored resumeADestructiveInspect
Revises one application's tailored resume using the supplied instruction, preserving its formatting and regenerating the PDF. scope identifies a section block or selected passage; otherwise the target is located from the instruction. The person's default uploaded resume is not modified; an active default variant is refused. Existing materials are required.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| instruction | Yes | ||
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| receipt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, and the description goes further by disclosing side effects and boundaries: formatting is preserved, the PDF is regenerated, the user's default uploaded resume is untouched, and an active default variant is refused. For a mutation tool this is unusually strong disclosure of what changes and what is protected.
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?
Four compact sentences, front-loaded with the action and side effect before the scope and precondition details. The telegraphic register ('scope identifies a section block or selected passage') is efficient, though the clipped final sentence reads more like a note than a complete statement.
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?
With an output schema present, return values need no explanation, and annotations cover the safety profile; the description adds preconditions, scope semantics, and side effects. Remaining gaps are peripheral: no mention of authorization requirements or reversibility (undo_last exists as a sibling), and the full set of scope kinds is left to the schema.
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 must compensate, and it only partially does: it explains that scope selects a section block or passage and that omitting scope falls back to instruction-based targeting. It never mentions the paragraph or answer scope variants that the schema supports, and it says nothing about applicationId or what the instruction string may contain.
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 names a specific verb and resource ('Revises one application's tailored resume') and constrains the scope to a single application, which separates it in practice from cover-letter or base-resume siblings. It stops short of explicitly naming the adjacent tools (edit_cover_letter, replace_application_document, format_resume), so differentiation is inferred rather than stated.
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?
It gives real usage context: scope may target a block or passage, otherwise the target is derived from the instruction, and it states preconditions ('Existing materials are required') plus a refusal condition ('an active default variant is refused'). No alternative tool is named for the cases where this one does not apply, so it is context-rich but not a full when/when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forget_hypothesisForget a guessADestructiveInspect
Deletes the specified unconfirmed career hypothesis from the account's stored hypotheses. Existing confirmed career facts and stated preferences are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| hypothesisId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered. The description adds genuinely useful scope beyond that: it states that confirmed career facts and stated preferences are untouched, which bounds the blast radius of a delete. It stops short of saying whether the deletion is reversible, which would matter given the sibling undo_last.
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 tight sentences with zero filler. The destructive action is front-loaded and the scoping reassurance follows immediately.
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?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description covers what is deleted and what survives, but omits reversibility and how to discover a hypothesisId — minor gaps for a single-parameter destructive tool.
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% for the single hypothesisId parameter, so the description carries the full burden. It only identifies the target entity ('the specified unconfirmed career hypothesis') and gives no format, source, or lookup guidance for obtaining a valid ID, leaving the parameter effectively undocumented.
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 a specific verb and resource — deletes a stored 'unconfirmed career hypothesis' — and the qualifier 'unconfirmed' implicitly separates it from confirm_hypothesis and remember_hypothesis. It is clear without opening the schema, though it never names a sibling tool explicitly.
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?
Usage is only implied: the agent can infer this is for discarding a guess rather than a confirmed fact. There is no explicit when-to-use statement, no mention of confirm_hypothesis as the alternative action, and no note on whether undo_last can reverse it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_resumeChange how part of the resume looksADestructiveInspect
Changes alignment, bold, italic or underline formatting of a tailored resume without changing its words. line identifies a passage and section identifies a heading; selected text can supply the target when neither is given. No writing model or allowance is used. The receipt includes undo.
| Name | Required | Description | Default |
|---|---|---|---|
| bold | No | `false` removes the mark. | |
| line | No | A few words that identify one non-blank line of the tailored resume, matched case-insensitively. | |
| text | No | A phrase within the targeted lines. When given, the marks apply to it alone; otherwise to the whole of each line. | |
| align | No | ||
| italic | No | `false` removes the mark. | |
| section | No | A heading as it appears on the resume, such as SUMMARY or EXPERIENCE; the section's lines under it are styled together. The heading line itself is not — to style it, name it as a `line`. | |
| underline | No | `false` removes the mark. | |
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the annotations: it discloses that no writing model or allowance is consumed (cost profile) and that 'the receipt includes undo' (reversibility), which materially softens the destructiveHint=true flag. It does not cover permission requirements or rate limits, so it stops short of a 5.
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?
Four tight sentences, front-loaded with the primary action, followed by targeting, cost, and receipt. Every sentence carries distinct information with no padding.
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 mutation tool with an output schema present, the description supplies the essentials: scope of change, targeting interaction, cost, and undo. An agent could invoke it correctly; only preconditions/permissions are left unaddressed.
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 75% (baseline 3), and the description goes further than the schema by defining the precedence logic the schema states only piecemeal: line identifies a passage, section identifies a heading, and selected text supplies the target when neither is given. This interaction rule is genuinely additive.
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?
States a specific verb (changes) and resource (alignment, bold, italic, underline formatting of a tailored resume) and explicitly bounds the operation with 'without changing its words.' This cleanly separates it from content-editing siblings like edit_resume or generate_resume, so an agent can tell them apart without opening a schema.
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?
Explains the targeting mechanism (line vs section vs selected text) but never states when to choose this tool over alternatives such as edit_resume, nor any preconditions. Usage is implied by context rather than asserted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_outreachGenerate outreach emailAInspect
Generates a personalized outreach-email draft for the specified contact and job. No email is sent by this call.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job ID | |
| contactId | Yes | Contact ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only, non-idempotent, non-destructive. The description adds the crucial behavioral fact those annotations do not convey: the mutation creates only a draft and nothing is transmitted. It remains silent on whether regenerating overwrites an existing draft and on any rate limits, keeping it short of a 5.
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 short sentences with zero filler, and the core action leads while the safety clarification follows immediately. Every clause earns its place.
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 two-parameter tool this covers the action and the key safety caveat, but with no output schema the description never says what comes back or where the draft lives (returned inline, saved to materials, viewable elsewhere) or what the agent should do with it next. That retrieval gap is the missing piece.
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 100%, so both parameters are already documented as UUIDs of type contact and job; the description only restates that the draft is scoped to a contact and a job. Baseline 3 is appropriate since the schema carries the semantic load.
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?
States a specific verb ('Generates') and resource ('personalized outreach-email draft') and scopes it to the two required inputs (contact and job), so an agent knows exactly what it produces. It does not, however, distinguish itself from other generation siblings in the list such as generate_pack or generate_resume, leaving the boundary to be inferred.
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 email is sent by this call' usefully implies this is the drafting step rather than the sending step, which nudges the agent toward it. But no alternatives are named (e.g. reply_to_recruiter for replying, generate_pack for full application packages) and no prerequisite conditions (does the contact need to exist?) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_packGenerate application materialsADestructiveInspect
Queues a tailored resume, cover letter and employer-question answers for one saved role. assets optionally selects a subset; omission requests all three. Each request spends one pack allowance, regardless of subset, and generation settles asynchronously. Existing materials can be overwritten by generation.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Listing or private-job id, for a role not yet prepared. | |
| assets | No | Subset to generate. Omit for all three. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations, which only flag destructiveHint=true and readOnlyHint=false. The description specifies exactly what destruction means ('Existing materials can be overwritten'), that generation is asynchronous, and that allowance is spent per request regardless of subset — details an agent cannot derive from structured fields.
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?
Four tight sentences, front-loaded with purpose before cost and async behavior. No filler; each sentence contributes a distinct fact (scope, subset handling, cost, side effects).
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?
An output schema exists, so return values need no explanation, and the annotations plus description cover the safety and behavioral profile. Cost, async settlement, overwrite risk, and subset defaults are all present — nothing needed to call it correctly is missing.
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% and the schema already documents both jobId and assets, including 'Omit for all three'. The description largely restates the assets semantics, adding only the allowance-per-subset angle. Baseline 3 is appropriate when the schema carries the parameter burden.
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?
States a specific verb ('Queues') and enumerates exactly what a pack contains: resume, cover letter and employer-question answers for one saved role. This distinguishes it from single-asset siblings like generate_resume or generate_outreach implicitly, but never names them, so the differentiation is inferential rather than explicit.
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?
Conveys cost context ('one pack allowance regardless of subset') and the default (omission requests all three), which helps an agent decide whether to request the full pack. However, it never states when to choose this over generate_resume/generate_outreach or what preparation state the role must be in, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_resumeGenerate tailored resumeBInspect
Generates a tailored resume for the specified account-owned application and returns its result. This does not submit an application.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Application ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the meaningful caveat that no application is submitted, but says nothing about whether generation is async, where the result is stored, or how it relates to get_generated_resumes.
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 short sentences with the core action front-loaded and the 'does not submit' caveat second. No wasted text.
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?
With no output schema, the description's claim to 'return its result' is unelaborated—an agent cannot tell whether it receives the resume directly, a task handle, or nothing. For a non-idempotent mutation with a downstream get_generated_resumes sibling, a bit more 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?
Schema coverage is 100% for the single applicationId parameter, so the baseline is 3. The phrase 'account-owned application' adds a mild provenance constraint beyond the schema but no format or syntax details.
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?
States a specific verb (Generates) and resource (tailored resume) scoped to an account-owned application. It is distinguishable from edit_resume/format_resume by the word 'tailored,' though it never explicitly contrasts with those siblings.
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 sentence 'This does not submit an application' is a useful when-not boundary and guards against confusion with apply. However, it gives no positive guidance on when to prefer this over format_resume, edit_resume, or generate_pack, leaving sibling selection implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_documentsGet links to one application's documentsARead-onlyInspect
Returns version-specific resume PDF and DOCX, cover-letter PDF and combined-pack PDF download links for one application, plus source, inclusion, lock state and revision. Links open without login for about ten minutes. Null links indicate missing or excluded documents. packPageUrl requires sign-in. There is no cover-letter DOCX.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| locked | Yes | A send is in flight; nothing about it can be changed. |
| resume | Yes | |
| revision | Yes | |
| expiresAt | Yes | |
| coverLetter | Yes | |
| packPageUrl | Yes | |
| applicationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, non-destructive). The description adds substantial behavioral context beyond them: links expire in about ten minutes, open without login, packPageUrl requires sign-in, null links mean missing/excluded documents, and no cover-letter DOCX exists.
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?
Front-loaded with the return content, then four tight sentences each carrying distinct operational facts. Slightly fragmented close ('There is no cover-letter DOCX') but no wasted sentences.
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?
An output schema exists, so return values need not be spelled out, yet the description still covers the critical caveats an agent needs (link expiry, auth exception, null semantics). Complete for a read-only document-link tool.
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 schema does not document applicationId. The description compensates partly by framing the tool as operating on 'one application', but it adds no format, source, or id-sourcing detail for the single parameter.
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?
Names a specific verb (Returns) and resource (version-specific resume PDF/DOCX, cover-letter PDF, combined-pack PDF download links for one application). An agent knows exactly what it gets back without opening the schema.
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 never says when to use this tool versus alternatives such as get_application_materials, get_resume_download_link, or get_pack_status. It implies a per-application document fetch but provides no routing or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_materialsGet application materialsARead-onlyInspect
Returns one account-owned application's resume and cover-letter materials plus draft employer-question answers with IDs, labels, current text and input type. Materials include default and tailored resume contents, selected variant, inclusion, lock state and optimistic revision for submission. Rendered resume PDFs are not included (pdfBase64 is null); get_application_documents returns download links for the files this application will send.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Application ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| answers | No | |
| materials | Yes | Revisioned, per-application material selection. Revision zero is the legacy fallback view; an Apply confirmation must persist a positive revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safe-read profile is covered. The description still adds useful behavioral context: material scope is 'account-owned,' the returned payload carries a lock state and optimistic revision for submission, and pdfBase64 is explicitly null. It stops short of describing pagination or size limits, but the added detail is meaningful.
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?
Three sentences, front-loaded with what is returned before the exclusion and the routing to the sibling. Dense but every sentence carries information (contents, revision/lock fields, PDF exclusion, alternative tool); no filler.
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?
An output schema exists, so return values need no prose explanation, yet the description still enumerates the salient payload fields and clarifies the PDF/return-link split. For a single-parameter read tool, nothing an agent needs to call it correctly is missing.
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?
Only one parameter (applicationId) exists and its schema coverage is 100% with a UUID format and pattern, so the schema fully documents it. The description adds no syntax or format detail beyond the schema, making the baseline of 3 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?
States a specific verb (Returns) and resource (an account-owned application's resume, cover-letter materials, and draft employer-question answers), enumerating the exact contents. It is clearly distinguishable from sibling tools like get_application_documents, which it explicitly names.
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?
Gives explicit when-not guidance (rendered resume PDFs are not included; pdfBase64 is null) and routes the agent to the correct alternative, get_application_documents, for download links. The condition selecting each tool is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_readinessCheck what applying still needsARead-onlyInspect
Returns readiness for one-off submission and Autopilot, plan entitlement and missing onboarding answers. Missing items include question, answerShape, choices, current value, available suggestion and webUrl. A null answerShape means the step requires the person's action in the web app. This read sends nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ready | Yes | A one-off `apply` would pass every profile and plan check now. |
| missing | Yes | |
| onboarding | Yes | |
| entitlement | Yes | |
| autopilotReady | Yes | |
| autopilotAvailable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description reinforces it with 'This read sends nothing.' It goes further than the annotations by disclosing return-shape details and the meaningful semantic that a null answerShape means the user must act in the web app.
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?
Three front-loaded sentences with no filler: what it returns, what the missing items contain, and the null-answerShape rule. The middle sentence is a dense enumeration but every item carries meaning, and the read-only caveat is kept to four 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?
With an output schema present the description need not explain return values, yet it still surfaces the one semantic an agent cannot get from schema structure alone (null answerShape = user action required in web app). Zero parameters and full annotation coverage leave nothing else materially missing.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The field-level terms it does mention (question, answerShape, choices, webUrl) describe the payload rather than inputs.
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 names a specific verb and resource ('Returns readiness for one-off submission and Autopilot, plan entitlement and missing onboarding answers'), which is far more concrete than the vague sibling get_application_status or the action-oriented prepare_applications. It does not, however, explicitly state how it differs from those adjacent tools, so an agent must infer the boundary.
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?
There is no explicit when-to-use guidance and no named alternatives, despite several plausible siblings (get_application_status, prepare_applications, strengthen_application). The reader can infer this is a pre-submission checklist, but nothing routes the agent between it and the alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_application_statusRead what happened to one applicationARead-onlyInspect
Returns an application's event timeline and separate submitted, employerConfirmed and replied facts. An application id or pipeline matchId resolves the application. Coverage names the mail this read inspected, normally only mail sent to the account's Dreamwork application address; employer mail sent anywhere else is not visible here and stays unknown. personalInboxConnected false is the normal state, not a setup step. The board column alone is not submission evidence. submittedAnswers contains captured employer-form values and cover-letter delivery for the proven submitted attempt, or null when submission, the attempt or a capture is unproven or unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Application id. A pipeline card's `matchId` is accepted and resolved to the application behind it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| truth | Yes | |
| status | Yes | |
| company | Yes | |
| timeline | Yes | |
| applicationId | Yes | |
| recoveryState | Yes | |
| submittedAnswers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this readOnly/no-destructive, so the safety profile is covered; the description adds real behavioral context beyond that: what Coverage means, that personalInboxConnected=false is normal rather than a setup step, that the board column is not submission evidence, and that submittedAnswers is null when the attempt or capture is unproven. It stops short of return-shape or ordering details, but the semantic caveats are substantive.
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?
Purpose is front-loaded in the first sentence and every following sentence carries a distinct constraint (coverage, inbox flag, board-column caveat, submittedAnswers nullability), so there is little dead weight. Density and unexplained domain jargon ('Dreamwork application address', 'proven submitted attempt') make it harder to parse than it needs to be.
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?
An output schema exists, so return structure need not be re-explained, and the description focuses on the interpretive semantics an agent needs (coverage scope, null semantics, what does not count as evidence). For a single-parameter read tool this is close to complete; only explicit sibling routing is missing.
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 one parameter and 100% schema description coverage, the schema already documents applicationId and even the matchId resolution rule. The description only restates 'An application id or pipeline matchId resolves the application', adding no format or edge-case detail beyond the schema, so the baseline of 3 applies.
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 opening sentence names a specific verb (Returns) and resource (an application's event timeline plus submitted/employerConfirmed/replied facts), which an agent can act on immediately. It does not, however, name or contrast with the nearest siblings (get_application_readiness, get_application_documents, get_pipeline), so differentiation is left to inference.
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?
It says the tool resolves via an application id or a pipeline matchId, which implies when it applies, and it warns that employer mail sent elsewhere 'is not visible here and stays unknown'. But there is no explicit when-to-use vs. sibling guidance (e.g. versus get_application_readiness or list_matches), so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_autopilot_settingsRead Autopilot settingsARead-onlyInspect
Returns the saved minimum Matches score, the default-versus-tailored resume choice, and whether Autopilot skips roles whose posted pay tops out below the person's minimum salary, with that minimum. Reading settings starts no applications.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| scoreFloor | Yes | |
| resumeVariant | Yes | |
| salaryMinimum | Yes | |
| scoreFloorDefault | Yes | |
| requireSalaryMinimum | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds meaningful behavioral context beyond that by stating that reading settings starts no applications, which is a domain-specific side-effect reassurance.
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 front-loaded sentence that immediately states what is returned. It is appropriately sized for a zero-argument read tool, though the trailing phrase "with that minimum" is slightly dense and could be clearer.
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?
Contextual completeness is high: there are no parameters to explain, annotations carry the safety profile, and an output schema exists for return details. The description still usefully names the settings returned and confirms that reading does not start applications.
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 takes zero parameters, so there are no parameter semantics for the description to compensate for. The baseline for a zero-parameter tool is 4, and nothing in the description makes the absence of parameters ambiguous.
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 uses a specific verb ("Returns") and names the exact saved Autopilot settings exposed by the tool: minimum Matches score, resume choice, and salary-skip behavior. It is clear what the tool does, though it does not explicitly distinguish itself from siblings such as get_autopilot_status or update_autopilot_settings.
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?
Usage is only implied: an agent can infer this is the read-side settings tool because it returns saved settings. The sentence "Reading settings starts no applications" clarifies side effects but does not say when to use this over get_autopilot_status or before update_autopilot_settings, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_autopilot_statusRead Autopilot statusARead-onlyInspect
Returns Autopilot state (on or off, matching the product switch, or unavailable when the plan does not include it), daily and monthly sent counts and plan limits, match-score floor, eligible and in-flight counts and nextRunAt, which is null unless the state is on. dailyLimit is today's allowance and usualDailyLimit is the plan's usual daily limit. On the first day Autopilot sends in a monthly window, dailyLimit is a larger first-day allowance; after that day it equals usualDailyLimit. That first day is the first day it sends in the window, not the first day of the calendar month. unavailableReason explains plan restrictions. No last-run timestamp is provided.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| state | Yes | |
| nextRunAt | Yes | |
| sentToday | Yes | |
| dailyLimit | Yes | |
| scoreFloor | Yes | |
| monthlyLimit | Yes | |
| eligibleCount | Yes | |
| inFlightCount | Yes | |
| sentThisMonth | Yes | |
| usualDailyLimit | Yes | |
| unavailableReason | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only safety profile, but the description adds real behavioral context: the on/off/unavailable state semantics, the null condition on nextRunAt, plan-restriction explanation via unavailableReason, and an explicit negative disclosure ('No last-run timestamp is provided'). This is well beyond what annotations convey, though it stays focused on output semantics rather than access constraints.
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?
It is front-loaded with the state values, but the middle is a long digression on dailyLimit vs usualDailyLimit first-day allowance logic that repeats itself and is partly redundant with the output schema. Some sentences earn their place, but the definition is longer than a zero-parameter status tool needs.
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 no-arg, read-only status tool with an output schema present, the description is essentially complete on the data model, including edge cases like the first-send-day allowance and unavailable plans. The one missing piece is any guidance on when to prefer this over sibling status/settings 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?
The tool takes zero parameters, so the baseline is 4. The description correctly adds nothing parameter-related and instead spends its budget on output semantics, which is appropriate for a no-arg status read.
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?
States a specific verb+resource ('Returns Autopilot state') and enumerates the returned fields, so an agent knows exactly what it reads. However, it never distinguishes itself from the closely-named siblings get_autopilot_settings or set_autopilot, leaving the agent to infer that this reads runtime status rather than configuration.
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 contains no when-to-use, when-not-to-use, or alternative-tool guidance. With siblings like get_autopilot_settings, set_autopilot, and get_usage available, an agent gets no routing help about which to call to answer an Autopilot question.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_career_recordRead the career recordARead-onlyInspect
Returns resume-derived professional facts, document-vault metadata, person-stated preferences, writing preferences and unconfirmed hypotheses as separate fields. Resume text and document bodies are excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Narrow the read. Omit for all four. A section you leave out comes back empty rather than absent, so do not read an omitted section as "they have none". |
Output Schema
| Name | Required | Description |
|---|---|---|
| facts | Yes | Null when no resume has been analyzed yet. |
| vault | Yes | Work-vault card titles and ids. Never their contents. |
| stated | Yes | |
| hypotheses | Yes | |
| writingPreferences | Yes | Comes with `hypotheses`; both live in the same record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine content-boundary information beyond that: it names the excluded material (resume text and document bodies), which tells the caller what they will not receive and therefore when another tool is needed.
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 tight sentences, front-loaded with the verb and the returned categories, with the exclusion caveat following. No filler, no repetition of the title or annotations.
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?
An output schema exists, so return-value explanation is unnecessary, and annotations cover the read-only safety profile; the description completes the picture with inclusion and exclusion scope. The remaining gap is routing guidance relative to the overlapping sibling reads, which is the one thing an agent could still get wrong.
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 100% and the 'include' parameter already carries a detailed, well-explained description (omit for all four; omitted sections return empty rather than absent). The description adds no syntactic or semantic detail beyond the schema, so the baseline 3 applies.
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 a specific verb (returns) and resource (career record) and enumerates the five content categories returned as separate fields, which is well beyond a tautology of the name/title. However, it does not distinguish this consolidated read from overlapping siblings such as get_resume_work_history, get_preferences, or get_application_documents, so an agent can't tell from the text alone why it should pick this tool over those.
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?
There is no statement of when to use this tool versus the many sibling reads that surface the same subject matter (get_resume_work_history, get_preferences, get_profile, get_application_documents). The only guidance present is parameter-level (how to use 'include'), which belongs to the schema rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_communication_preferencesRead email preferencesARead-onlyInspect
Returns job-alert settings and cadence, Autopilot result-email mode, product-update consent and the all-optional-emails-off state. jobAlertEligibility separately reports delivery restrictions such as bounce or unsubscribe. Account, security, billing and essential employer mail are outside these settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| jobAlerts | Yes | |
| productUpdates | Yes | |
| autopilotResults | Yes | |
| jobAlertEligibility | Yes | |
| allOptionalEmailsOff | Yes | |
| autopilotResultsOffAt | Yes | When Autopilot results were last turned off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: the inclusion of the 'all-optional-emails-off state' and the separate jobAlertEligibility channel for bounce/unsubscribe restrictions, plus explicit out-of-scope boundaries. It does not address auth, rate limits, or freshness, so it earns moderate credit rather than high.
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?
Three tightly written sentences: what is returned first, then the jobAlertEligibility nuance, then the exclusion boundary. Nothing is padded, and the most important content is front-loaded.
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?
With an output schema present, return shapes need not be described, and the description correctly focuses on scope: what categories are included and which mail types are excluded. For a zero-parameter read tool this is nearly complete; only the routing relationship to sibling preference tools is missing.
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 takes zero parameters, so there is nothing for the schema or description to disambiguate; baseline is 4 for an argument-free 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 names a specific verb ('Returns') and enumerates the exact preference categories covered: job-alert settings and cadence, Autopilot result-email mode, product-update consent, and the all-optional-emails-off state. This makes the tool's scope legible against sibling preference readers, though it does not explicitly name the alternative tools (e.g. get_preferences or update_communication_preferences) to sharpen the 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?
Usage is implied by the scoping sentence: 'Account, security, billing and essential employer mail are outside these settings' tells the agent what this tool does not cover, which is genuinely useful routing information. However, there is no explicit when-to-use versus alternatives guidance, and the read/write split with update_communication_preferences is left to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generated_resumesGet generated resumesARead-onlyInspect
Returns tailored resumes generated for the specified account-owned application. Rendered PDFs are not included (pdfBase64 is null).
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Application ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds genuinely useful behavioral context beyond them by disclosing that rendered PDFs are excluded and pdfBase64 will be null, which prevents a wasted expectation about binary content.
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 tight sentences with zero waste. The core behavior and the notable PDF exclusion are both front-loaded.
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 read-only lookup with full annotation coverage, the description is nearly complete and even flags the null PDF field. Without an output schema it could say more about the returned resume fields, but nothing essential for calling it correctly is missing.
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% for the single applicationId parameter, so the schema already documents it. The description reinforces that the ID must be account-owned but adds no format or syntax detail beyond the schema, matching the baseline.
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?
States a specific verb (Returns) and resource (tailored resumes) scoped to an account-owned application. It implicitly distinguishes itself from generate_resume by being the retrieval side, but it does not name any sibling explicitly.
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?
Usage is implied: call it to read resumes already generated for an application. There is no explicit when-to-use vs alternatives (e.g., get_application_materials, get_resume_download_link, generate_resume), so the agent must infer the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inboxRead recruiter conversationsARead-onlyInspect
Returns recruiter conversations ordered by newest activity, including role, message kind, unread state and whether the employer wrote last. unanswered means the employer wrote last; needsReply means that message asks for a response. A threadId returns its messages. Reading does not mark mail read. limit and nextOffset support pagination; mail bodies are third-party content. A page holds 20 threads by default and limit accepts up to 50; for the next page, send the previous nextOffset as offset, and null means the end.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | Threads to skip; the previous result's `nextOffset`. | |
| threadId | No | Read one thread in full instead of listing. | |
| unreadOnly | No | Only threads holding mail the person has not been shown. | |
| unansweredOnly | No | Only threads whose last employer mail needs a reply. |
Output Schema
| Name | Required | Description |
|---|---|---|
| threads | Yes | |
| messages | Yes | Populated only when `threadId` was given. |
| nextOffset | Yes | |
| totalThreads | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint, but the description adds genuinely useful behavior: reading does NOT mark mail read, threads are ordered by newest activity, and mail bodies are third-party content. It stops short of naming mark_messages_read or noting auth/rate-limit constraints, so it is strong but not exhaustive.
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?
Front-loaded with the core purpose and scope, then filters, then pagination, then the side-effect caveat. Sentences are dense and each carries information, though the middle clauses about unanswered/needsReply are somewhat compressed.
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 an output schema exists, the description needn't explain return values and instead covers everything else an agent needs: mode selection, filter semantics, pagination flow, and the non-marking read behavior. Nothing required to call it correctly is missing.
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 schema coverage at 80%, the schema already documents offset and the filter flags, so the baseline is 3. The description goes further by tying pagination together: 20-thread default page, limit up to 50, send previous nextOffset as offset, and null signals the end.
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 opens with a specific verb and resource ("Returns recruiter conversations ordered by newest activity") and enumerates the fields returned, so the agent knows exactly what it gets. It does not name any sibling tool, so differentiation from tools like get_unread_reminders or mark_messages_read is only implied.
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?
It clearly distinguishes the two modes (listing vs. a single threadId) and explains the two filter flags (unreadOnly, unansweredOnly) with precise definitions. It also signals the safe-read behavior, but never explicitly names an alternative tool or an exclusion condition for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobRead one roleARead-onlyInspect
Returns one saved or corpus role by id with full description, company, location and remote terms, salary, posted date, match score, saved state, board column, application id, material readiness and work-eligibility verdict. url is the Dreamwork listing page; sourceUrl is the employer's direct posting. eligible is true for an unrestricted role or a confirmed allowed country, false for a high-confidence restriction excluding confirmed countries, and null when eligibility is unknown. Only false blocks applying or Autopilot: null means eligibility is not yet known, so proceed with applying — the application itself surfaces any real restriction. whyItMatches may be empty when no matcher explanation is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Listing id or private-job id from the feed or envelope. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description goes well beyond them by defining the eligible tri-state and its concrete effect ('Only false blocks applying or Autopilot'), plus the url vs sourceUrl distinction and the possibility of an empty whyItMatches. That is genuinely useful behavioral context the agent cannot get from the annotations or schema.
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 lead sentence is front-loaded and field-dense, and the eligibility paragraph earns its length because it changes agent behavior. The url/sourceUrl sentence is a slight digression given an output schema exists, keeping it just short of a 5.
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?
With an output schema present, return-value explanation is technically redundant, and the description nonetheless supplies the interpretation the schema cannot (what null vs false eligibility means for applying). Nothing needed to invoke it correctly is missing; only sibling disambiguation is absent.
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 is a single parameter with 100% schema description coverage, so the schema already carries the semantics; per the baseline this is a 3. The description adds no syntax, format, or sourcing detail about jobId beyond what the schema states.
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?
States a specific verb and resource ('Returns one saved or corpus role by id') and enumerates the payload fields, so the agent knows exactly what it gets back. It does not, however, distinguish itself from siblings like get_listing or browse_listings, leaving the agent to infer the boundary between the corpus/private-job lookup and listing browsing.
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?
There is no statement of when to call this versus get_listing, browse_listings, or list_matches, which is the primary selection problem for a single-role fetch. The eligibility paragraph guides downstream behavior (apply or not) rather than tool choice, so no real selection guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listingGet listing detailsARead-onlyInspect
Returns full details of a platform job listing identified by id. No login is required. url is the Dreamwork listing page; sourceUrl is the employer's direct posting.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Listing ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the bar is lower. The description adds real value by clarifying the two URL fields (url = Dreamwork page, sourceUrl = employer posting) and stating 'No login is required' — auth context beyond annotations. Still no pagination/return-shape notes, so it stays at 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?
Three front-loaded sentences, each carrying distinct payload (what it returns, no login needed, meaning of the two URL fields). Zero waste and no repetition of the title.
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 single-param read tool with annotations covering safety and no output schema, the description is largely sufficient. It could go further by explaining the distinction from get_job, but nothing needed to call it correctly is missing.
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% and the single id parameter is fully described in the schema, so the baseline is 3. The description doesn't add id format or semantics beyond what the schema enforces.
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?
States a specific verb+resource ('Returns full details of a platform job listing') scoped by the identifying id, and distinguishes 'platform job listing' from adjacent tools like get_job and browse_listings. An agent knows exactly what this 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?
Implied usage (fetch details for a known listing id), but there is no explicit when-to-use vs get_job/browse_listings, and no stated condition for picking this over a sibling. Adequate but with a clear gap given the crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_pulseGet market pulseARead-onlyIdempotentInspect
Returns CURRENT worldwide hiring-market context from Dreamwork's live job corpus, refreshed twice daily: companies tracked, open roles, roles added in the last 7 days, growing vs contracting companies, week-over-week movement, plus global layoff pressure by industry and company. All figures are worldwide; for country- or function-scoped company lists use get_top_hiring_companies. Use it as fresh evidence that postdates your training data when advising on job-search strategy, industry outlook, or where opportunity is moving. No login required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| hiring | Yes | |
| layoffs | Yes | Global layoff pressure. null when the layoffs feed has no data. |
| howToUse | Yes | |
| generatedAt | Yes | When the underlying snapshot was computed (UTC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds operational context the annotations cannot: the corpus is refreshed twice daily, all figures are worldwide with no filtering, and no login is required. The freshness cadence and the global-scope constraint are exactly the traits an agent needs to reason about data staleness and applicability.
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?
Three sentences, no filler, and the most load-bearing facts come first: what is returned and the refresh cadence. The sibling routing clause and the advisory-use clause each carry distinct information rather than restating the opening sentence.
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?
An output schema exists, so return structure need not be spelled out, yet the description still summarizes the metric families an agent will see. Combined with zero parameters and full annotation coverage, nothing an agent needs to call this correctly is missing.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description does add that scope is fixed to worldwide, which usefully tells the agent there is no filtering knob to look for.
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?
States a specific verb and resource ('Returns CURRENT worldwide hiring-market context from Dreamwork's live job corpus') and then enumerates the exact dimensions returned: companies tracked, open roles, 7-day additions, growing vs contracting, WoW movement, layoff pressure. It also distinguishes itself from the sibling that sounds most similar, get_top_hiring_companies, so an agent can route without opening either schema.
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?
Explicitly names the alternative and the condition that selects it: 'for country- or function-scoped company lists use get_top_hiring_companies'. It also states the use case for this tool ('fresh evidence that postdates your training data when advising on job-search strategy, industry outlook, or where opportunity is moving'), giving both when-to-use and when-to-defer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pack_statusCheck whether materials are readyARead-onlyInspect
Returns material preparation state for the specified application, board-card or listing ids: queued, generating, ready, partial, failed, stale, not_started or not_found. Includes requested and completed assets, edit and lock state, material revision and review-page URL. Reading starts no generation and changes no materials.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationIds | Yes | Application ids from a receipt or a result; a card or listing id on the board also resolves. |
Output Schema
| Name | Required | Description |
|---|---|---|
| packs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful nuance that a read will not kick off generation, plus the shape of returned fields (assets, edit/lock state, revision, review URL). It adds modest value on top of the annotations, hence 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?
Two sentences, front-loaded with the enumerated states and followed by scope/behavior. Efficient, though the status enumeration is somewhat long.
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?
An output schema exists so return values need not be spelled out, and annotations carry the safety profile. The description supplies the state vocabulary and the no-generation caveat, leaving only the relative positioning against sibling status tools implicit.
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% and the schema itself explains that a card or listing id also resolves, which the description largely restates. With only one well-documented parameter, the baseline 3 is appropriate and the description adds little 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?
States a specific verb (Returns) and resource (material preparation state) and enumerates the concrete status values (queued, generating, ready, partial, failed, stale, not_started, not_found). This is well beyond a tautology, but it does not explicitly distinguish itself from look-alike siblings like get_application_materials or get_application_readiness.
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 closing clause 'Reading starts no generation and changes no materials' gives clear when-to-use context, implicitly steering the agent here when it wants status without triggering work (as opposed to generate_pack). It stops short of naming any alternative explicitly, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pipelineRead the pipelineARead-onlyInspect
Returns saved and applied roles as board cards with column, application id and last-updated time. total and counts cover all matching records; complete identifies whether cards are truncated by limit. limit defaults to 50 cards and accepts up to 100; there is no next page, so when complete is false narrow the read with status. Column values describe board state and do not establish employer receipt or response.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | Yes | |
| total | Yes | |
| counts | Yes | |
| complete | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the description earns credit for adding real behavior: no next page, limit bounds, truncation signaled by 'complete', and the caveat that column values reflect board state rather than employer receipt. These are details an agent cannot infer from annotations.
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?
Front-loaded with what is returned, then pagination mechanics, then a semantic caveat. Every sentence carries distinct information; nothing is redundant with the schema or annotations.
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?
With an output schema handling return structure and annotations handling safety, the description fills the remaining gaps: pagination limits, truncation semantics, and how to narrow results. An agent has everything needed to call 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?
Schema coverage is 0%, so the description must carry the burden. It documents 'limit' fully (default 50, max 100) and explains the purpose of 'status' (narrowing a truncated read), which meaningfully compensates for the missing schema descriptions, though it does not interpret the individual enum values.
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?
States a specific verb and resource ('Returns saved and applied roles as board cards') plus the payload shape (column, application id, last-updated time), so an agent can tell it apart from get_application_status or list_matches. It does not explicitly name a sibling, but the resource scope is distinctive enough.
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?
Provides operational guidance ('when complete is false narrow the read with status'), which is invocation-level rather than tool-selection guidance. It never says when to choose this over sibling read tools like get_application_status or list_matches, leaving selection implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_platform_contextGet platform contextBRead-onlyIdempotentInspect
Returns Dreamwork's job-search, pipeline, resume-tailoring, application, outreach and interview capabilities, plus its product context.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| thesis | Yes | |
| platform | Yes | |
| agentGuidance | Yes | |
| systemsOfRecord | Yes | |
| systemOfIntelligence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without description help. The description's added value is limited to naming the content categories returned; it does not disclose size, structure, or freshness of that context.
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?
A single front-loaded sentence with no filler; the capability list is long but informative rather than redundant. Nothing is wasted, though the enumeration could have been trimmed in favor of the more useful 'when to use' sentence.
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?
An output schema exists, so the description need not describe return values, and as a zero-parameter read-only tool the contract is simple. The description adequately frames what the tool is, with the only real gap being the absence of usage positioning relative to siblings.
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 takes zero parameters, so the schema-vs-description burden is nil and the baseline is 4. Nothing in the description contradicts or misrepresents the empty input contract.
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?
States a specific verb and resource ('Returns Dreamwork's ... capabilities, plus its product context') and enumerates the capability areas covered (job-search, pipeline, resume-tailoring, application, outreach, interview). It is clearly distinguishable from any sibling, none of which is an overview/context tool, though it does not explicitly say so.
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?
There is no guidance on when to call this versus the ~50 sibling tools. For an orientation/context tool the natural guidance would be 'call this first to discover platform capabilities before invoking domain tools', but nothing like that is stated or implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_preferencesRead job preferencesARead-onlyInspect
Returns stated target functions, work locations and modes, relocation, pay floor, availability, deal-breakers, excluded companies, places and levels, seniority, AI-role interest and cover-letter settings. unanswered identifies preference keys the account holder has not supplied. It does not return resume content or work history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| unanswered | Yes | Preference keys the person has never answered. |
| preferences | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the meaning of the 'unanswered' field and an explicit statement of what the call will not return.
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 with no filler, and the capability statement is front-loaded. The opening sentence is a long comma-separated inventory, which is dense but each item is a real field, so nothing is wasted.
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?
With an output schema present, the return shape need not be spelled out, yet the description still names the covered fields and the special 'unanswered' key, which is more than required. It is complete for a zero-parameter read tool.
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 takes zero parameters, so the baseline of 4 applies; the description does not need to explain any input semantics, and the schema is 100% documented.
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?
States a specific verb and resource (returns job preferences) and enumerates the exact fields covered, which lets an agent distinguish it from siblings like get_resume_work_history and get_profile without opening a schema.
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?
Usage is implied by the field inventory rather than stated; the negative clause ('does not return resume content or work history') helps route away from resume tools, but no alternative (e.g. update_preferences for writes, get_communication_preferences for messaging settings) is named as the when-to-use choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileGet profileARead-onlyInspect
Returns the authenticated account's profile, resume text, preferences and profileIdentityVersion snapshot. resumeUrl is null when the stored resume file is inline rather than a link; resumeText carries its contents.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| profile | Yes | Full user_profiles row (client-safe preferences) as returned by GET /profile. |
| prefsVerifyPending | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description goes beyond that by disclosing a subtle data condition: resumeUrl is null when the resume is inline and resumeText carries its contents instead, plus that profileIdentityVersion is a snapshot. That is genuine behavioral context an agent could not derive from the name or annotations.
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, no filler. The primary return payload is front-loaded and the resumeUrl/resumeText caveat follows as the one non-obvious detail.
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?
With an output schema present and no parameters, the description need not explain return structure, and it correctly restricts itself to the one nuance the schema may not convey (null resumeUrl). The only shortfall is the absent routing guidance versus sibling read 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?
The tool takes zero parameters and schema coverage is 100%, so the baseline of 4 applies. There is no parameter detail the description could usefully add.
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 gives a specific verb (returns) plus the exact resource bundle: profile, resume text, preferences, and the profileIdentityVersion snapshot. An agent can distinguish it from mutation siblings like update_profile, though it never contrasts itself with the other read siblings (get_preferences, get_career_record).
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?
There is no stated when-to-use, no prerequisites, and no mention of alternatives despite a crowded field of get_* siblings that overlap on preferences and career data. The agent must infer that this is the canonical profile read 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.
get_resume_download_linkGet a link to the person's resumeARead-onlyInspect
Returns a download link for the account's main profile resume as a PDF, with its expiry, filename and MIME type. The link opens without login for ten minutes and only for the file that existed when it was made. It returns no file content. status is ready, no_resume_on_file or no_file_for_resume; the last two carry null fields and are not errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| status | Yes | `ready` carries the link. The other two mean there is nothing to link to, and every other field is null. |
| filename | Yes | |
| mimeType | Yes | |
| expiresAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich context beyond annotations: link expiry (ten minutes), no-login access, immutability ('only for the file that existed when it was made'), no file content, and detailed status values with non-error explanations. Annotations flag read-only/non-destructive, but the description covers operational behavior fully.
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?
Three sentences, front-loaded with the core purpose and key constraints. Every sentence adds essential information without repetition.
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?
Complete for a zero-param, read-only tool with an output schema. The description covers link expiry, access constraints, immutability, content absence, and status values, leaving no ambiguity for correct invocation or interpretation.
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 per guidelines. The description appropriately focuses on output semantics and doesn't need to discuss params.
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?
States a specific verb (returns) and resource (download link for profile resume as PDF), and clarifies scope: 'main profile resume.' Distinguishes from siblings like get_profile, upload_resume, and edit_resume by narrowly defining it as link generation, not fetching content.
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 when to use by distinguishing it from content retrieval ('It returns no file content'), which is useful against siblings like get_profile that might return resume data. However, it doesn't explicitly name alternative tools or when-not scenarios beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resume_work_historyRead how the resume's experience was understoodARead-onlyInspect
Returns the account's main resume grouped by role: each employer with its title, location, dates and bullets as read from the file's page layout, plus achievements placed under no role and a count of bullets whose extracted-text position disagrees with the layout. status is ready, pending (still being read; call again shortly) or unavailable (no resume, or it could not be read).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| roles | Yes | |
| source | Yes | `pdf` when read from the uploaded file's layout, `text` when only the extracted text was available (a DOCX, or a file too large to read as pages). |
| status | Yes | `ready` carries the grouping. `pending` and `unavailable` carry empty lists. |
| derivedAt | Yes | |
| unattributed | Yes | Achievements the resume lists under no role, such as a Key Achievements section, or lines the layout left unplaced. Generated materials never attach these to an employer. |
| bulletsOutOfTextOrder | Yes | How many bullets the resume's extracted text places under a different role than its page layout does, which usually means a two-column file. Zero means none detected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, closed-world behavior, so the burden is lighter, and the description layers on real value: the three status states with their meanings, the fact that data is parsed from page layout, and that a count is returned for bullets whose extracted position disagrees with the layout. It does not cover auth or rate limits, but the domain-specific caveats are unusually informative.
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?
Effectively two sentences, front-loaded with the return shape and then the status semantics. Dense but every clause carries meaning; slightly heavy for a single paragraph, though nothing is padding.
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 parameterless and read-only, with an output schema present, so the description need not restate return values. It still proactively explains the grouping model, residual anomalies, and the polling implication of 'pending', leaving no gap an agent must guess at before calling.
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 takes zero parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate, and it does not invent or confuse any input contract.
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?
States a specific verb and resource (returns the account's main resume) and adds precise scope: 'grouped by role' with employer, title, location, dates, bullets, plus orphaned achievements and an anomaly count. This is clearly distinguishable from siblings like edit_resume, upload_resume, or get_resume_download_link.
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?
There is no explicit routing against alternatives (e.g., versus get_generated_resumes or edit_resume), but the description does give operational guidance for the pending state ('still being read; call again shortly') and defines when 'unavailable' applies. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsGet pipeline statsARead-onlyInspect
Returns aggregate account-owned job, application, escalation and outreach statistics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | Job counts for the user, total and by worker status. |
| outreach | Yes | Outreach counts for the user, total and by status. |
| escalations | Yes | Escalation counts for the user's applications. |
| applications | Yes | Application counts by status plus derived quality metrics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds the meaningful scope qualifier 'account-owned' and enumerates the statistical domains, but says nothing about freshness, caching or aggregation window, which would be valuable for a stats 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?
A single, front-loaded sentence with no redundant or filler content. It is exactly the right size for a zero-parameter read tool.
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?
With an output schema present, return values need not be explained, and the zero-parameter schema plus read-only annotations cover structure. The scope is stated, so the definition is largely complete, though a hint about when to prefer this over similar siblings is absent.
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 takes zero parameters, so there is nothing for the description to document beyond what the empty schema shows. Baseline 4 applies; no parameter meaning is missing.
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 gives a specific verb ('Returns') and enumerates the exact resources covered: job, application, escalation and outreach statistics, scoped to account-owned data. This is clear, but it does not distinguish this tool from adjacent siblings like get_usage, get_pipeline or get_application_status, which also surface account-level data.
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?
There is no guidance on when to call this versus the many other get_* siblings, nor any stated prerequisites or context. The agent must infer usage entirely from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskRead one entry in the record of what ranARead-onlyInspect
Returns one account-owned assistant ledger entry by taskId, including action, status, receipt, error code, and creation and update times. Queued work can be followed through its recorded status.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that the entry includes action, status, receipt, error code, and timestamps, which is useful but largely restates what the existing output schema already carries.
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, front-loaded with the core verb+resource and scoped by taskId, then a follow-on usage note. Efficient, though the field enumeration is somewhat redundant against the output schema.
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 single-parameter read tool with an output schema and full annotation coverage, the description supplies enough to invoke it correctly. The only gap is not naming list_tasks as the alternative when the agent wants more than one entry.
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 description names taskId as the lookup key, but with 0% schema description coverage it adds no format, origin, or source detail (e.g. where a taskId comes from). It marginally exceeds the bare schema without compensating for the coverage gap.
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?
States a specific verb (Returns) and resource (one account-owned assistant ledger entry) keyed by taskId, which is clear. It implies but never names list_tasks, so sibling differentiation relies on the reader inferring 'one entry' vs a list.
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 sentence 'Queued work can be followed through its recorded status' gives a usage context for following in-flight work. However, it never explicitly says when to use this over list_tasks or get_pack_status/get_autopilot_status, leaving the choice implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_hiring_companiesGet top hiring companiesARead-onlyIdempotentInspect
Returns the companies hiring the most right now, ranked by open roles among companies active in the last 7 days, with hiring trend, week-over-week velocity and median pay. Optional filters: job function, country, hiring trend. Use it to ground company recommendations in fresh data that postdates your training data; each company's url is its page on Dreamwork. No login required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many companies to return, 1-25. Default 15. | |
| trend | No | Keep only companies with this hiring trend. | |
| country | No | Two-letter ISO country code, e.g. US. | |
| function | No | Limit to one job function, e.g. engineering. |
Output Schema
| Name | Required | Description |
|---|---|---|
| filters | Yes | |
| matched | Yes | Companies matching every filter at the company level (at least one role per filter), ranked by open roles. |
| howToUse | Yes | |
| companies | Yes | |
| generatedAt | Yes | When the underlying snapshot was computed (UTC). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, it discloses the ranking methodology, an implicit eligibility filter (companies active in the last 7 days), the freshness guarantee, the meaning of the returned url field, and that no login is required. These are exactly the operational facts annotations cannot convey.
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 core behavior and ranking logic are front-loaded in the first clause, followed by filters, use case, and auth note in a compact package. Some density ('with hiring trend, week-over-week velocity and median pay') lists return fields the output schema already defines, which is slight redundancy.
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?
With an output schema present, the description needn't explain return values, and it covers ranking basis, freshness, filter set, URL meaning, and auth. Nothing an agent needs to invoke this zero-required-parameter tool correctly is missing.
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 100% and the enums are already documented, so the schema carries the parameter burden. The description only restates three of the four filters (function, country, trend) and omits limit entirely, adding no syntax or semantics 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?
States a specific verb and resource ('Returns the companies hiring the most right now') plus the exact ranking rule ('ranked by open roles among companies active in the last 7 days'). An agent can distinguish this from browse_listings or get_market_pulse because the output is companies, not jobs or aggregate market stats.
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?
Gives an explicit use case: 'ground company recommendations in fresh data that postdates your training data.' That is a clear trigger condition, but no when-not guidance or named alternative sibling is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_remindersCheck for unread recruiter mailARead-onlyInspect
Returns unread recruiter-message and thread counts, oldest unread time and recent message previews with thread, company, role and kind. Reading does not mark messages read. Previews contain third-party email content.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | Yes | The newest unread messages, at most ten. |
| unreadThreads | Yes | |
| oldestUnreadAt | Yes | |
| unreadMessages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description nonetheless earns credit for adding two things annotations cannot: that reading has no side effect on read state (idempotent polling), and that previews contain third-party email content.
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?
Three short sentences, front-loaded with the return payload, then the side-effect guarantee, then the privacy caveat. No filler and nothing restated from the title.
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?
With an output schema present the description need not detail the return shape, yet it still summarizes it usefully for selection. Annotations cover safety and a zero-param schema needs no explanation, so nothing an agent needs to invoke this correctly is missing.
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 takes zero parameters, so there is nothing for the description to disambiguate; schema coverage is 100% with an empty object. Baseline of 4 for a parameterless tool applies.
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?
States a specific verb and resource and enumerates exactly what is returned (unread counts, oldest unread time, previews with thread/company/role/kind). It distinguishes itself from a general inbox tool by the 'unread' scope. It never names the closest siblings (get_inbox, mark_messages_read) explicitly, so a small differentiation gap remains.
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?
Usage is implied by the name and the 'unread' scoping rather than stated: an agent can infer 'use this to check whether anything needs attention.' The line 'Reading does not mark messages read' hints that mark_messages_read is a separate action, but neither the when-to-use condition nor the alternative is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_updates_sinceRead what changed since a momentARead-onlyInspect
Returns new matches, board-status changes, employer-mail threads and Autopilot state since the supplied timestamp. asOf is the next watermark. Match discovery includes overlapHours, defaulting to 72, before since because listings may become servable after first discovery; repeated ids can appear. Truncation counts identify older changes excluded by caps. Reading marks no mail read and creates no schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | The previous result's `asOf`, or when the person last checked. | |
| overlapHours | No | How far before `since` to look for new matches; 72 when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | Yes | |
| notes | Yes | |
| newMail | Yes | Threads where the employer wrote since `since`, newest first, at most ten. |
| autopilot | Yes | |
| newMatches | Yes | |
| moreMatches | Yes | |
| matchPoolStatus | Yes | |
| matchesAddedAfter | Yes | |
| applicationChanges | Yes | Board cards that moved since `since`, newest first, at most twenty. |
| applicationChangesTruncated | Yes | How many older board moves were cut off by that cap. They fall before the next call's watermark, so a nonzero value means: do not advance past these changes - call get_pipeline (or repeat with an earlier `since`) before moving the watermark, or they are lost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations by disclosing that reading marks no mail read and creates no schedule, that repeated ids can appear (dedup is not guaranteed), and that truncation counts indicate older changes excluded by caps. These are exactly the behavioral traits an agent cannot infer from structured fields.
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?
Front-loaded with the resource and change types, then the pagination contract, then side-effect guarantees. Dense but every sentence contributes; the overlapHours rationale is slightly interpolated mid-sentence, which mildly hurts readability.
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?
With an output schema present, return shape need not be described, and the description still covers the chaining watermark, overlap semantics, duplicate ids, truncation signaling, and absence of side effects. Nothing needed to call or continue-iterate this tool is missing.
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% so the schema already documents both parameters, but the description adds meaning beyond it: asOf is framed as the next watermark and overlapHours is justified by late-servable listings rather than merely restating its default.
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?
States a specific verb and resource ('Returns new matches, board-status changes, employer-mail threads and Autopilot state since the supplied timestamp'), enumerating the exact change types covered. This makes it clearly distinguishable from point-in-time siblings like list_matches, get_inbox, or get_autopilot_status.
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?
Explains the invocation pattern precisely: pass the previous result's asOf as the next since, and the overlapHours default exists because listings may become servable after first discovery. It does not explicitly name alternatives or say when a full re-list (e.g. list_matches) is preferable, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upgrade_linkGet a link to upgradeARead-onlyIdempotentInspect
Returns a browser link to checkout for the requested Pro or Dreamer plan and optional billing interval or promo code. Sign-in precedes checkout when required. No charge occurs until payment is confirmed on the checkout page.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | The plan the person asked for. | |
| promoCode | No | Only when the person supplied one. | |
| billingInterval | No | Only when the person named one. Quarterly is one invoice every three months at about 15% less; a promo code prices a monthly invoice, so the two cannot be combined. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context beyond them: the sign-in requirement that can precede checkout and the fact that no charge occurs until payment is confirmed on the checkout page.
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?
Three tight sentences with the core action front-loaded, then the sign-in caveat, then the no-charge reassurance. No filler and no repetition of the title.
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?
With no output schema, the description correctly states what is returned (a browser link to checkout). Combined with the full schema coverage and annotations, an agent has what it needs to call it, though the absence of any sibling differentiation against 'start_checkout' leaves one open question.
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% and the schema itself already documents the promo/billing incompatibility and quarterly discount. The description only echoes the parameter surface ('optional billing interval or promo code') without adding syntax, defaults, or conflict rules beyond what the schema provides. Baseline 3 applies.
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?
States a specific verb and resource: returns a browser checkout link for the Pro or Dreamer plan, with optional billing interval or promo code. The purpose is immediately legible, but it does not distinguish itself from the sibling 'start_checkout', which an agent could plausibly confuse it with.
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?
Usage is implied by the plan/promo/interval framing, and it usefully notes that sign-in precedes checkout and no charge occurs until payment is confirmed. However, it never says when to prefer this over 'start_checkout' or other checkout-adjacent siblings, so the routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageRead what the plan still allowsARead-onlyInspect
Returns packs and applications used today, the account's limit for each and the next reset time. A null limit represents an unlimited allowance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | Yes | |
| resetsAt | Yes | |
| packsLimit | Yes | |
| packsUsedToday | Yes | |
| applicationsLimit | Yes | |
| applicationsUsedToday | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious semantics — that the window is 'today' only, and that a null limit means unlimited rather than zero or missing — which is the kind of detail an agent would otherwise misread.
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, front-loaded with what is returned, with the edge-case rule second. No filler, no restatement of the title or annotations.
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?
With an output schema and full annotations already present, the description does not need to enumerate return fields, and it sensibly focuses on the one interpretation trap (null = unlimited). The only gap is the absence of any usage trigger guidance, which is outside the structural data's reach.
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 takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The null-limit note is output semantics rather than parameter guidance, but it is still useful framing.
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 opens with a concrete verb and resource: it returns today's pack and application usage, per-item limits, and the next reset time. That is specific enough to distinguish it from every sibling (none of which report quota/limit data), though the phrasing is in domain jargon rather than plainly saying 'quota/usage check'.
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 mention of 'the account's limit' and 'next reset time' implies the use case (checking remaining allowance before generating), but the description never states when to call it versus alternatives or any preconditions. Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_jobImport a job from a URLADestructiveInspect
Fetches a public job-posting URL and imports it as a private role in the account's pipeline. Extraction runs asynchronously and the card appears when it finishes. A posting already held by Dreamwork returns completed without another fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Job posting URL, as the person gave it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=true), and the description adds real context beyond them: extraction is asynchronous, the card appears only on completion, and an already-held posting returns completed without a re-fetch (idempotency). It does not clarify why destructiveHint is set, given the import reads as additive.
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?
Three tight sentences, purpose front-loaded, then behavior, then the idempotency edge case. Every sentence carries information an agent would otherwise have to guess.
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?
An output schema exists, so return values need no explanation, and the description covers scope, async timing, and the duplicate-posting case. It leaves the destructiveHint annotation unexplained, which is the one gap an agent might care about before calling it.
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% for the single parameter, so the baseline is 3. The description adds a small but meaningful constraint ('public' URL), yet no format or validation detail beyond what the schema already declares.
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 gives a specific verb (fetches/imports) and resource (a public job-posting URL into a private role in the pipeline), so an agent knows exactly what happens. It stops short of distinguishing itself from close siblings like add_jobs or save_job, leaving the agent to infer which one applies.
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?
Usage is implied rather than stated: the tool is for turning a URL into a pipeline role, but there is no explicit when-to-use, when-not, or named alternative. The note about postings already held by Dreamwork returning 'completed' is a behavioral fact, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsList contactsARead-onlyInspect
Returns the account's saved recruiter and referrer contacts, optionally filtered by company.
| Name | Required | Description | Default |
|---|---|---|---|
| company | No | Filter by company |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that results are limited to the account's saved recruiter/referrer contacts and that filtering is optional, but says nothing about ordering, pagination, or result size, which matter for a list 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?
A single front-loaded sentence that states the resource, its scope, and the optional filter, with no filler. Appropriately sized for a one-parameter read tool.
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?
There is no output schema, but for a simple filtered-list read tool whose safety semantics are already in annotations, the description covers what the agent needs before calling. It would be slightly stronger with a note on result ordering or volume, which is the only real gap.
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 100% and there is only one optional parameter, so the schema fully documents 'company'. The description's 'optionally filtered by company' merely restates that; baseline 3 applies.
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?
States a specific verb (returns/lists) and resource (the account's saved recruiter and referrer contacts), and the 'recruiter and referrer' qualifier narrows scope beyond a generic contacts list. It does not explicitly name the sibling add_contact, but the read/write distinction is obvious from the names, so clarity is high.
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?
Usage is only implied — the description tells you the tool lists saved contacts with an optional company filter, but gives no when-to-use guidance, no prerequisites, and no explicit pointer to the complement (e.g. add_contact for creating contacts). Minimum viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dismissed_matchesList dismissed matchesARead-onlyInspect
Returns the account's dismissed listings, newest first, with listing id, title, company, Dreamwork page url, dismissal time and whether the listing is still active. total counts all dismissed listings. limit defaults to 20 and accepts up to 50; nextOffset continues the list and null ends it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 20 when omitted. | |
| offset | No | `nextOffset` from the previous page; 0 when omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| matches | Yes | |
| nextOffset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false). The description adds useful behavioral details beyond that: results are newest first, total counts all dismissals, limit caps at 50, and pagination ends when nextOffset is null. It does not discuss auth or rate limits, but those are less critical for a read-only list.
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 front-loaded with purpose in the first sentence, then compactly covers total count, page size limits, and pagination continuation. Every sentence earns its place with no redundant filler.
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 a read-only list with an output schema and fully described parameters. The description supplies the ordering, total-count semantics, and pagination behavior, which is sufficient for an agent to call 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?
Schema description coverage is 100%, so the baseline is 3. The description still adds meaning by clarifying that 'nextOffset continues the list and null ends it,' which helps an agent understand pagination termination beyond the schema's offset description.
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 names the specific verb (Returns) and resource (account's dismissed listings), and the word 'dismissed' distinguishes it from the sibling list_matches. It also immediately states the ordering and returned fields, so an agent can tell what the tool does without opening the schema.
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?
Usage is implied by the purpose: retrieve dismissed listings. However, the description does not explicitly say when to choose this over list_matches, dismiss_match, or restore_match, nor does it provide exclusions or alternative-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interviewsList interviewsARead-onlyInspect
Returns all interviews detected for the account, including role, company, time and platform when known. No role filter is applied.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful 'when known' caveat about partial data and the field list, but says nothing about ordering, pagination or result size, so it adds only modest context beyond the annotations.
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 tight sentences with the core purpose front-loaded and the scope caveat last. The 'No role filter is applied' clause is slightly awkward given the tool accepts no parameters at all, but the text is otherwise waste-free.
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 read-only list tool whose annotations cover safety, the description substitutes for the absent output schema by naming the fields returned. Ordering and pagination behavior remain unstated, which is a minor gap rather than a blocking one.
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 takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate beyond confirming that no role filter is available.
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?
States a specific verb and resource ('Returns all interviews detected for the account') and enumerates the fields returned (role, company, time, platform). There is no interview-specific sibling in the tool list, so no sibling routing is needed, but the description never explicitly frames itself against the list_* family.
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?
Usage is only implied: you call it to see interviews. The clause 'No role filter is applied' is a scope caveat that hints at a filtered alternative but names none and states no when-to-use/when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_matchesList matchesARead-onlyInspect
Returns the account's ranked live match pool with job id, its Dreamwork page url, title, company, location, remote terms, salary, dates, match percent and saved/applied state. Filters narrow that pool; nextCursor continues a page with identical filters, and null ends the walk. A page holds 10 jobs by default and limit accepts up to 50; the next page is the previous nextCursor, which keeps the page size it was issued with. addedAfter supports overlapping discovery windows because listings can become servable after first discovery. notes describe applied filters and coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order; relevance when omitted. | |
| bonus | No | ||
| limit | No | Page size, 10 when omitted. A cursor keeps the size it was issued with. | |
| query | No | Free-text search across the person's match pool. | |
| aiRole | No | AI roles only. | |
| cursor | No | `nextCursor` from the previous page. Send the same filters and sort, or it is refused. | |
| equity | No | ||
| function | No | Job-function labels, comma-separated for a union, e.g. "Engineering,Product". An unknown label is refused with the list. | |
| industry | No | Employer industry, e.g. "Pharma & Biotech". An unknown name is refused with the list. | |
| location | No | City, region, or country; a place the gazetteer cannot resolve is refused. | |
| maxSalary | No | Pay ceiling in whole annual USD. | |
| minSalary | No | Pay floor in whole annual USD, e.g. 200000. Jobs with no posted pay drop out. | |
| seniority | No | Seniority labels, comma-separated for a union: Junior, Mid-Level, Senior, Staff+, Director+. A hard filter: pass it when the person names a level they want only, because the stored level ranks matches but never removes other levels. It also drops roles whose level was never classified. | |
| addedAfter | No | Only jobs Dreamwork first saw after this ISO date-time. | |
| healthcare | No | ||
| internship | No | Internships, co-ops, and apprenticeships only. | |
| remoteOnly | No | Shorthand for workSettings ["remote"]. | |
| workSettings | No | Work settings to keep, as a union; an unstated setting counts as onsite. | |
| minMatchPercent | No | Lowest match percent to keep, on the 40-97 scale shown. | |
| postedWithinDays | No | Employer posting date within this many days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| notes | Yes | |
| total | Yes | Jobs these filters keep, across all pages. Following every nextCursor returns this many while poolChanged stays false. |
| poolSize | Yes | Jobs a walk of this pool returns before this call's filters narrow it, so it equals total when no filter is set. Dismissed and saved roles, excluded companies and same-company same-title duplicates are already left out, and so are onsite roles outside the area of someone who will not relocate, unless location or workSettings is set. query, functions and location also choose which pool is built. |
| nextCursor | Yes | |
| poolStatus | Yes | |
| poolChanged | Yes | |
| appliedFilters | Yes | |
| filteredToEmpty | Yes | True when this call's filters left none of the poolSize jobs. total 0 with this false means the pool itself is empty or still building. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/closed-world, so the bar is lower. The description adds real behavior: default page size of 10, a 50 cap, cursors preserving their issued page size, and notes describing applied filters and coverage. It stops short of stating failure modes beyond cursor/filter mismatch.
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?
Front-loads the return payload, then pagination, then edge-case rationale. Dense but mostly earns its place; nextCursor is explained twice (once for continuation, once for page-size retention), a slight redundancy.
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?
An output schema exists so return values need not be re-explained, yet the description covers pagination, filter narrowing, and notes semantics adequately for a 20-parameter list tool. Filter-interaction details (e.g. how filters combine) remain slightly thin.
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 high (85%), so the per-parameter docs already do the heavy lifting. The description adds cross-parameter semantics (cursor must reuse identical filters/sort, cursor keeps issued page size), but largely restates what limit and addedAfter already document.
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?
States a specific verb and resource: returns the account's ranked live match pool, and enumerates returned fields (job id, company, salary, match percent, saved/applied state). The word 'live' implicitly scopes it apart from list_dismissed_matches, but no sibling is named explicitly.
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?
Explains pagination usage (nextCursor continues a page, null ends the walk) and the addedAfter overlap rationale, but gives no guidance on when to choose this over browse_listings, get_listing, or list_dismissed_matches. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList what the assistant has done recentlyARead-onlyInspect
Returns recent account-owned assistant actions, newest first, across the site and MCP. status filters ongoing, completed or failed work; limit bounds the result. The ledger records actions rather than conversation text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely non-structured context: results are newest-first, scoped to account-owned actions from both the site and MCP, and the ledger stores action records rather than conversation text. Pagination and the default page size are not addressed.
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?
Three tight sentences: purpose and ordering first, then the two parameters, then a clarifying note about what the ledger contains. No filler, though the mid-sentence parameter enumeration makes the middle clause slightly denser than needed.
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?
An output schema exists, so return values need not be explained, and the low-complexity two-parameter surface keeps the bar modest. However, the description leaves the status enum largely undocumented and gives no sibling differentiation, which are the two gaps an agent would most likely hit.
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 must carry the burden and it only partially does: it says status filters ongoing/completed/failed work and limit bounds the result. The enum actually has seven values including queued, verifying, cancelled, and undone, and the description never mentions the default of 20 or the maximum of 50.
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?
States a specific verb+resource ('Returns recent account-owned assistant actions') plus ordering ('newest first') and scope ('across the site and MCP'). It does not distinguish itself from sibling tools like get_task or get_updates_since, so an agent cannot route between them from this text alone.
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?
Usage is only implied: 'recent account-owned assistant actions' tells an agent this is an activity-listing call, and the mention of filtering by status/limit hints at the use case. There is no explicit when-to-use or when-not, and no pointer to the adjacent get_task, get_updates_since, or undo_last tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_applied_offsiteRecord an application made elsewhereADestructiveInspect
Records an application the account holder submitted outside Dreamwork. Exactly one of matchId, listingId or url names the role; a role not yet in the pipeline is added in Applied without generating materials, and an unlisted URL is imported in the background. appliedAt (YYYY-MM-DD or ISO 8601, not in the future) is the reported application date and defaults to now; repeating the call with a new appliedAt corrects it. attestation:true is required and represents the person's confirmation that submission occurred. Recorded roles are excluded from matches and Autopilot. Applications Dreamwork is still sending are refused. There is no undo. This call does not send an application.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The job posting's URL, for a role Dreamwork does not list. | |
| matchId | No | Board card id from `get_pipeline`. | |
| appliedAt | No | When they applied, as YYYY-MM-DD or an ISO 8601 timestamp. Not in the future. Omitted means now. | |
| listingId | No | Dreamwork listing id, from `list_matches` or `get_job`. The role does not have to be saved. | |
| attestation | Yes | The person stated they applied to this role themselves. Never assumed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true and openWorld=true, and the description substantiates both with non-obvious side effects: 'There is no undo,' 'Recorded roles are excluded from matches and Autopilot,' background URL import, and refusal of in-flight applications. This is materially more than the annotations convey.
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?
Effectively front-loaded: role identification, then date/idempotency, then attestation, then side effects and constraints. It is dense and slightly run-on in the middle clauses, but nearly every sentence carries a distinct operational fact.
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?
With an output schema present, return values need not be described, and the description instead covers everything an agent must know before writing: the exclusivity of the three identifying params, the required attestation, the mutation's irreversibility, and its effect on matches/Autopilot.
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%, so the baseline is 3, but the description adds genuine constraints absent from the schema: 'Exactly one of matchId, listingId or url names the role' (a mutual-exclusivity rule the schema does not enforce), appliedAt defaulting and future-date prohibition, and the meaning of attestation. This is real added value over structured fields.
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?
States a specific verb+resource ('Records an application the account holder submitted outside Dreamwork') and immediately scopes it against the sibling `apply` with 'This call does not send an application.' An agent can distinguish this from `apply`, `import_job`, and `add_jobs` without opening any schema.
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?
Explicitly defines the trigger condition (application submitted elsewhere) and the inverse case ('Applications Dreamwork is still sending are refused'). It also names the correction path ('repeating the call with a new appliedAt corrects it'), so the agent knows both when to call and when to re-call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_messages_readMark recruiter messages readADestructiveInspect
Marks the specified recruiter messages read within one thread. Message ids identify the exact messages presented to the account holder; other messages remain unread. The change has no undo.
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | Yes | The thread the messages were shown from, as `get_inbox` gave it. | |
| messageIds | Yes | Ids of the messages the person was shown. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation is flagged. The description adds the crucial detail that 'the change has no undo' (irreversibility) and that only the listed messages are affected, which goes beyond what the annotations convey.
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?
Three short sentences, front-loaded with the action and scope, then the effect, then the irreversibility warning. Every sentence carries distinct information with no repetition of the name or schema.
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?
An output schema exists so return values need no explanation, and annotations cover the safety profile. For a two-parameter mutation tool, the description supplies scope, effect on other messages, and irreversibility — everything needed to call 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?
Schema coverage is 100%, so the baseline is 3. The description nevertheless adds meaning by explaining what messageIds represent ('the exact messages presented to the account holder') and constraining threadId to a single thread, clarifying the intended values beyond the schema text.
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?
States a specific verb (marks read) and resource (recruiter messages) with an explicit scope boundary ('within one thread'). The clause 'other messages remain unread' pins down exactly what is and isn't affected, which separates it cleanly from siblings like get_inbox and get_unread_reminders.
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?
Usage is only implied: the reference to 'messages presented to the account holder' and the schema note 'as get_inbox gave it' suggest this follows a get_inbox call. There is no explicit when-to-use statement, no prerequisites, and no named alternative, though no sibling competes for this action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_pipelineMove a pipeline cardADestructiveInspect
Moves one role's board card to the requested column using the account holder's reported state. No employer is contacted. APPLIED records an application rather than submitting one; INTERVIEWING creates a durable interview record. WITHDRAWN removes the card from the active board. Closing a role can remove its listing from the feed. A receipt offers undo only when reversible.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| matchId | Yes | Board card id from `get_pipeline`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it discloses side effects per status (INTERVIEWING creates a durable interview record, WITHDRAWN removes the card, closing a role removes its listing from the feed), confirms no employer contact, and explains that undo is only offered when reversible. This goes well past the destructiveHint/openWorldHint flags.
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?
Front-loads the core action, then layers the status semantics in tight clauses with no filler. Slightly list-like and dense, but every sentence carries signal.
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?
With annotations covering the safety profile and an output schema covering return values, the description focuses correctly on behavioral meaning. It is nearly complete, missing only full coverage of the remaining enum statuses.
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 50% (matchId documented, status enum undocumented), and the description compensates by explaining the semantics of several enum values (APPLIED, INTERVIEWING, WITHDRAWN). It leaves other enum values (SAVED, CONFIRMED, OFFER_RECEIVED, ACCEPTED, REJECTED, NO_RESPONSE) unexplained, so it adds meaning but not completely.
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?
States a specific verb (moves) and resource (a role's board card to the requested column), and explicitly distinguishes the operation from submitting an application ('APPLIED records an application rather than submitting one'). An agent can separate this from apply/mark_applied_offsite without opening their schemas.
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?
Clarifies the intent boundary ('No employer is contacted'; APPLIED records rather than submits), which tells the agent when this is the right tool versus an actual apply flow. It stops short of naming sibling alternatives or explicit exclusions, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_preferences_textSet several preferences from one sentenceAInspect
Parses a sentence describing job preferences, applies supported fields and returns applied values and unparsed fragments. Compensation and seniority are not set by this parser and remain unparsed.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The person's sentence, verbatim. |
Output Schema
| Name | Required | Description |
|---|---|---|
| applied | Yes | |
| unparsed | Yes | Fragments no preference key could carry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it's a non-destructive write, and the description adds real value: it mutates by 'applying supported fields', returns both applied values and unparsed fragments, and explicitly excludes two fields. It doesn't state auth needs or partial-failure 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?
Two sentences, zero waste, with the core action and the explicit field exclusions front-loaded. Every clause earns its place.
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?
An output schema exists so return values needn't be explained, yet the description still outlines applied values plus unparsed fragments. Combined with the field exclusions, this is nearly complete for a simple 1-param mutation, with only edge-case behavior left open.
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?
Single parameter with 100% schema coverage, so the schema already documents 'text' as the verbatim sentence. The description's reference to 'a sentence' adds no syntax or format detail beyond the schema, making the baseline 3 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?
States a specific verb (parses) and resource (preferences text) and clarifies it applies supported fields while leaving compensation and seniority unparsed. This distinguishes it well from update_preferences, though it doesn't name a sibling explicitly.
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?
Usage is implied — use it when you have a natural-language preference sentence. The negative scope (compensation/seniority not set) is helpful, but there's no explicit when-to-use vs update_preferences or guidance on what text is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_applicationsPrepare applications for several rolesADestructiveInspect
Saves and prepares materials for up to ten specified roles sequentially without submitting applications. Unsaved roles consume the daily save allowance; generation for saved roles consumes pack allowance. Finished or in-flight preparation is reused, and person-edited materials are preserved. Each role returns its own outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Subset to write for every role. Omit for all three. | |
| jobIds | Yes | Listing or private-job ids, each once. |
Output Schema
| Name | Required | Description |
|---|---|---|
| receipt | Yes | |
| results | Yes | |
| allowance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the two distinct allowance costs (daily save allowance for unsaved roles, pack allowance for saved roles), idempotent reuse of finished/in-flight preparation, and preservation of person-edited materials. These are exactly the destructive/consumptive side effects an agent needs before committing, which the destructiveHint=true annotation alone cannot convey.
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?
Four tight sentences, front-loaded with the core action and the non-submission constraint before the allowance and reuse details. Dense but every clause carries actionable information; no filler.
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?
With an output schema present, the per-role outcome sentence is a sufficient pointer to the return shape, and the allowance/reuse rules cover the main behavioral risk. What remains unstated is failure semantics (e.g., partial batch failure handling), a minor gap for a batch mutation tool.
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%, so both parameters (jobIds, assets) are already documented, including the 'omit for all three' default. The description adds only the count bound ('up to ten'), which mirrors maxItems, so it does not meaningfully extend parameter meaning.
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?
States a specific verb+resource ('Saves and prepares materials'), a bounded scope ('up to ten specified roles'), and a critical negative constraint ('without submitting applications') that separates it from apply. An agent can immediately tell this is a batch-preparation tool, not a submission tool.
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 'without submitting applications' clause clearly frames when this tool applies versus apply/cancel_apply, and the reuse rule tells the agent it is safe to call for already-prepared roles. It stops short of explicitly naming the alternative tool or stating when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remember_hypothesisRemember a guess about the personADestructiveInspect
Stores an unconfirmed career hypothesis separately from established facts. At most twenty hypotheses may be pending; further writes are refused at that limit. The statement does not change matching preferences or become a confirmed profile fact.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The belief, in one sentence, phrased as a guess. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint/readOnlyHint already declared, the description still adds genuinely new operational facts: a hard quota of twenty pending hypotheses with writes refused at the limit, and explicit non-effects (does not alter matching preferences, does not become a confirmed fact). This is exactly the kind of side-effect and capacity disclosure the annotations cannot carry.
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?
Three short sentences, front-loaded with the core action, then the quota, then the non-effects. Every sentence carries distinct information with no repetition of the title or annotations.
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?
An output schema exists, so return values need no explanation, and the description plus annotations cover safety profile, capacity limits, and side effects. Nothing an agent needs to invoke this correctly is missing.
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?
Single parameter with 100% schema description coverage ('The belief, in one sentence, phrased as a guess'), so the schema already handles semantics. The description adds no format, length, or phrasing detail beyond it, making the baseline 3 correct.
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?
States a specific verb and resource ('Stores an unconfirmed career hypothesis') and immediately scopes it against confirmed material ('separately from established facts'), which implicitly separates it from the confirm_hypothesis sibling. An agent can tell what this creates without opening the schema.
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?
Gives clear context for use (unconfirmed guesses) and a when-not ('does not ... become a confirmed profile fact'), but never names the alternative tools (confirm_hypothesis, forget_hypothesis, get_career_record) that an agent would need to route between pending and confirmed states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reopen_application_materialsEdit materials for a safe retryAIdempotentInspect
Opens a new editable material revision only after the API establishes that a failed application cannot still submit. Access is restricted to the Applications rollout cohort admitted by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| applicationId | Yes | Failed application ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| materials | Yes | Revisioned, per-application material selection. Revision zero is the legacy fallback view; an Apply confirmation must persist a positive revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (not read-only, idempotent, non-destructive), so the bar is lower. The description adds meaningful behavioral context beyond them: the operation is gated on an API-side determination that the failed application cannot still submit, and access is cohort-restricted. It doesn't describe what happens to prior materials, but the added gating logic is substantive.
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 tight sentences with no filler, front-loading the core action and following with the precondition and access constraint. Slightly jargon-heavy phrasing ('material revision', 'rollout cohort') keeps it from a 5.
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?
With an output schema present, return values need no explanation, and annotations cover the safety profile. The description supplies the precondition and access scoping, making it reasonably complete for a one-parameter gated mutation.
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 100% and the single applicationId parameter is documented as the failed application ID, so the schema does the heavy lifting. The description adds no further parameter meaning; baseline 3 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?
States a specific verb and resource: it opens/creates a new editable material revision for a failed application. This is clearer than a bare restatement of the name, though it does not explicitly differentiate itself from siblings like update_application_materials or restore_material.
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?
It implies the when: only after a failure where the application cannot still submit, and notes access is limited to the Applications rollout cohort. But it never names an alternative tool (e.g. update_application_materials) or explains what to do when the precondition is not met, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_application_documentUse the person's own document for one applicationADestructiveInspect
Replaces one application's resume or cover letter with the person's supplied text or raw-base64 PDF, DOCX, TXT or MD. The stored content is not rewritten by a model. A resume becomes the selected tailored copy; a letter becomes included. PDF resumes retain their original file, while other formats are rendered from extracted text. expectedRevision is required; locked or sent applications are refused. The account's main resume is unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| text | No | The whole document as the person wrote it. Send this or `file`. | |
| document | Yes | ||
| applicationId | Yes | ||
| expectedRevision | Yes | The `revision` from get_application_documents or get_application_materials. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag it as destructive and non-readonly, and the description adds substantial context beyond that: content is not model-rewritten, PDFs keep their original file while other formats are rendered from extracted text, the resume becomes the selected tailored copy, the letter becomes included, and locked/sent applications are refused. That is exactly the behavioral detail a mutation tool needs.
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?
Five dense sentences, all load-bearing, with the core action and input modes front-loaded before the storage/refusal caveats. Slightly heavy for one paragraph, but no filler.
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 destructive mutation with a nested object, 3 required params, and an output schema, the description covers concurrency (expectedRevision), refusal conditions, storage/rendering behavior, and collateral effects (main resume untouched). An agent has everything needed to invoke it safely.
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 only 40% schema description coverage, the description compensates well: it explains the text-vs-file choice, enumerates the accepted formats (PDF, DOCX, TXT, MD), and clarifies the document enum semantics ('a resume becomes the selected tailored copy; a letter becomes included'). It adds nothing about applicationId or filename, so it is not fully compensating.
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?
States a specific verb (Replaces), a bounded resource (one application's resume or cover letter), and the accepted inputs. It is clearly distinguishable from sibling generators such as generate_resume or edit_cover_letter because it explicitly imports the person's own artifact rather than producing one.
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?
It establishes context ('with the person's supplied text') and gives explicit preconditions and exclusions: expectedRevision is required, locked or sent applications are refused, and the account's main resume is unaffected (routing away from upload_resume's effect). It never names a sibling alternative by name, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_recruiterReply to a recruiterADestructiveInspect
Sends the supplied reply text to one existing recruiter conversation under the account holder's identity. Sending requires explicit consent and an unambiguous thread; otherwise the result is a confirmation hold containing the draft. Sent mail cannot be recalled. Threads whose ids begin with inbound: cannot receive replies through this endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The full reply text, as it will be sent. | |
| threadId | Yes | ||
| confirmationToken | No | Echo the token from a previous `held` result to carry out the act it described, and only after the person has seen that result's summary and agreed to it. Send identical arguments: the token is bound to the exact call it was issued for, so a changed argument is held again with a fresh token and a fresh summary. It lasts two minutes and is spent once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, destructive=true, openWorld=true) by disclosing the confirmation-hold behavior, the fact that sent mail cannot be recalled, and the inbound: thread restriction. These are the exact traits an agent needs before attempting a send.
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?
Three sentences, no filler, with the core action stated first and the safety constraints following in priority order (consent, thread validity, irreversibility, id exclusion).
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?
With no output schema, the description carries the burden of explaining the held/confirmation outcome, and it does so concisely. It stops just short of describing how a caller recovers from a hold beyond what the confirmationToken schema already says.
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 67% (threadId undocumented in the schema), and the description compensates by constraining threadId to an existing thread whose id does not start with inbound:. The confirmationToken flow is already well described in the schema, so the description adds targeted value rather than restating.
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?
States a specific verb (sends), resource (reply text to one existing recruiter conversation), and the acting identity. It is clearly distinct from siblings such as generate_outreach or add_contact, and the scope 'one existing recruiter conversation' is unambiguous.
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?
Gives real preconditions: explicit consent and an unambiguous thread, plus an explicit exclusion (threads whose ids begin with inbound: cannot receive replies here). It does not name a sibling alternative for the inbound case, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_matchRestore a dismissed matchADestructiveInspect
Reverses the dismissal of a role, every listing with the same employer and title, so it can return to the account's match feed, job alerts and Autopilot. Restoring a listing that is not dismissed returns a no-op receipt. Restoring does not save the listing. A closed listing stays out of the feed.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Listing id, as `dismiss_match` and `list_dismissed_matches` give it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With destructiveHint=true and readOnlyHint=false already declared, the description adds real value: side effects on the match feed, job alerts and Autopilot, the no-op receipt behavior, and the closed-listing edge case. It does not explain why the destructive hint applies or whether the restore is itself reversible, leaving that gap to the annotations.
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?
Four short sentences, front-loaded with scope and effect, then the no-op case, the not-saved caveat and the closed-listing edge case. No sentence is redundant.
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?
An output schema exists (the no-op receipt need not be described) and annotations carry the safety profile, so the description only has to cover side effects and edge cases — which it does for the feed, alerts, Autopilot and closed listings.
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%, so baseline is 3, but the description adds meaning the schema does not: the single jobId implicitly selects a role whose sibling listings with the same employer and title are also restored. That fan-out is important semantics an agent would otherwise miss.
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?
Specific verb (reverses the dismissal) plus a precise resource scope: a role and every listing sharing the same employer and title. The fan-out scope is stated up front, which also separates it from dismiss_match and save_job without needing the schema.
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?
Clear operating context is given: restoring a non-dismissed listing is a harmless no-op, restoring does not save the listing (implicitly routing to save_job), and closed listings stay out of the feed. It stops short of naming an alternative tool explicitly or stating prerequisites, so it is short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_materialPut a document back the way it wasADestructiveInspect
Restores a cover letter, tailored resume or answer to a recorded pre-edit version within its undo window. Arguments must match the recorded edit; arbitrary replacement text is refused. Resume restoration uses resumeRevisionId and restores the application's sendable copy.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The text that stood before the edit, from its receipt. Required for `coverLetter` and `answers`; a resume restore names a revision instead. | |
| asset | Yes | Which asset the edit changed. | |
| question | No | The answer's question text; required for `answers`. | |
| applicationId | Yes | ||
| resumeRevisionId | No | The tailored-resume revision to put back, from the `edit_resume` receipt. Required for `resume`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds genuine context beyond that: the undo-window time limit, the requirement that arguments match the recorded edit (arbitrary replacement is refused), and that a resume restore reinstates the application's sendable copy. It stops short of stating what happens on an expired window or a non-matching argument.
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?
Three front-loaded sentences: purpose first, then behavioral constraint, then the resume-specific parameter note. No filler, though the third sentence is narrowly scoped and slightly scattered within an otherwise tight block.
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?
With an output schema present the return values need no explanation, and annotations carry the destructive profile. Combined with the undo-window and argument-matching details, an agent has enough to call it correctly, though the asset-to-parameter mapping for each enum branch is only partially spelled out.
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 80%, so the schema already documents text, asset, question and resumeRevisionId. The description only adds the resume-specific note (resumeRevisionId restores the sendable copy) and leaves applicationId undescribed in both places, so the baseline 3 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?
States a specific verb ('Restores') and resource set (cover letter, tailored resume, answer) scoped to 'a recorded pre-edit version within its undo window.' This is clearly the undo counterpart to edit_resume/edit_cover_letter/edit_answer, but the description never names a sibling, so differentiation is inferred from the verb rather than stated.
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 'within its undo window' clause and the argument-matching constraint imply when the tool is applicable (immediately after an edit you want to revert), but there is no explicit when-to-use/when-not guidance and no routing against potentially confusable siblings like undo_last or restore_match.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_application_answersSave the person's application answersADestructiveInspect
Saves person-stated application-answer and contact groups through onboarding validation, then rechecks readiness and completes setup when no requirements remain. statedByPerson:true attests that supplied values came from the person. eligibility.countries replaces the stored list. An empty answer set can finish otherwise-complete onboarding. Returns ready and stillMissing; no application is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| answers | No | ||
| contact | No | ||
| statedByPerson | Yes | The person gave every value here in this conversation. Never assumed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ready | Yes | |
| receipt | Yes | |
| stillMissing | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true/readOnly=false, and the description meaningfully extends them: it explains the replace-vs-merge semantics, that an empty answer set can finish onboarding, that readiness is rechecked, and critically that no application is sent. That last point usefully bounds the blast radius of a destructive-classified 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?
Dense and front-loaded – the core action leads, followed by flag semantics, replacement behavior, the empty-set edge case, and the return contract. No filler sentences, though the single unbroken paragraph is dense to parse.
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 destructive, deeply nested, 3-param tool with an output schema, the description covers the operation's scope, side-effect boundary, edge case, and return fields (ready/stillMissing) without re-explaining the schema. Only the contact-group parameter semantics remain unaddressed.
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 only 33%, so the description must carry load. It does add the literal meaning of the required statedByPerson:true flag and the replace semantics of eligibility.countries, but says nothing about the contact group fields or how the nested answer groups are validated. Partial compensation, not full.
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?
States a specific verb and resource ('Saves person-stated application-answer and contact groups') and describes the downstream effect (validation, readiness recheck, setup completion). It is distinguishable from siblings like edit_answer and update_profile, though it never names an alternative to route against.
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?
Usage is implied rather than stated: the reader infers this is the write path for onboarding answers and that an empty set is legal, but there is no explicit when-to-use versus edit_answer or update_profile, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_jobSave a jobADestructiveInspect
Saves one role to the account's pipeline at SAVED as a bookmark. No application is submitted or queued until apply is called. Application materials may start preparing in the background. An already saved role returns a no-op receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Listing id or private-job id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: idempotent re-saves 'return a no-op receipt' and background 'Application materials may start preparing.' The one gap is that annotations declare destructiveHint=true while the description frames the operation as a benign bookmark, and it never explains what is at risk or why the destructive flag applies.
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?
Four short sentences, each carrying distinct information (target state, no submission, background prep, idempotency) and the core action is front-loaded. Minor redundancy between 'No application is submitted or queued' and 'until apply is called,' but nothing padding.
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?
With an output schema present, the description needn't explain the returned receipt, and it covers the key behavioral facts an agent needs (bookmark semantics, deferred application, background prep, idempotency). The only omission is any note on required permissions or the source of the destructive annotation.
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 100% for the single jobId param (which accepts 'Listing id or private-job id'), so the schema already carries the semantics. The description adds nothing about the identifier, which is the correct baseline-3 behavior.
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?
States a specific verb and resource ('Saves one role to the account's pipeline at SAVED as a bookmark') and immediately distinguishes the action from apply, so the agent can tell a bookmark-save apart from an application submission without opening sibling schemas.
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?
Clearly frames the boundary against the alternative: 'No application is submitted or queued until apply is called,' which tells the agent when this tool is and isn't the right step. It doesn't enumerate other alternatives (e.g. import_job, get_pipeline), but the key branch point with apply is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_autopilotTurn Autopilot on or offADestructiveInspect
Sets Autopilot on or off after explicit consent. On authorizes recurring real employer submissions under the account holder's name without per-application approval. Off stops sending and keeps the minimum match, resume choice and queue; paused is accepted and means off. Daily and monthly limits remain determined by the plan.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | ||
| confirmationToken | No | Echo the token from a previous `held` result to carry out the act it described, and only after the person has seen that result's summary and agreed to it. Send identical arguments: the token is bound to the exact call it was issued for, so a changed argument is held again with a fresh token and a fresh summary. It lasts two minutes and is spent once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite destructiveHint=true already being present, the description discloses consequences the annotations cannot: turning on authorizes recurring real employer submissions under the account holder's name without per-application approval, while off stops sending but preserves minimum match, resume choice and queue. It also states the consent prerequisite and that plan limits still govern.
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?
Three dense but front-loaded sentences: the action first, then the consequence of each state, then the invariant limits. No filler and no repetition of schema or annotation 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 an open-world, destructive mutation with no output schema, the description covers consent, both state outcomes and the persistence rules. The held-result/token handshake is left mostly to the schema description, so the description is nearly but not fully self-sufficient.
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 50%: the enum values are listed but undescribed, and confirmationToken carries its own rich schema text. The description compensates for the enum gap by explaining that 'paused' is accepted and semantically equals off, and it ties the operation to explicit consent, which is the token's purpose.
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?
States a specific verb (sets) and resource (Autopilot) plus the state transition on/off, so an agent immediately knows the operation. It does not explicitly distinguish itself from the adjacent update_autopilot_settings / get_autopilot_status siblings, which is the only gap.
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?
It supplies a precondition (only after explicit consent) and accepts 'paused' as an alias for off, implying usage context. However it never names update_autopilot_settings as the alternative for non-toggle changes, so the routing decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_checkoutStart checkoutAInspect
Returns a checkout URL for the requested plan change after explicit consent. A confirmation hold precedes checkout creation. This call does not charge the account; payment details and payment confirmation occur on the billing page.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | The plan the person asked for. | |
| promoCode | No | Only when the person supplied one. | |
| billingInterval | No | How often to invoice, only when the person named one; omitted means monthly. Quarterly is one invoice every three months at about 15% less than three monthly ones. A promo code prices a monthly invoice, so the two cannot be combined. | |
| confirmationToken | No | Echo the token from a previous `held` result to carry out the act it described, and only after the person has seen that result's summary and agreed to it. Send identical arguments: the token is bound to the exact call it was issued for, so a changed argument is held again with a fresh token and a fresh summary. It lasts two minutes and is spent once. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, open-world, non-destructive write, and the description adds genuinely new behavioral context: a confirmation hold precedes creation, the call itself does not charge, and payment happens elsewhere. It does not disclose token lifetime or rate/retry behavior in the prose (that lives in the schema), so a 4 rather than a 5.
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?
Three short sentences, front-loaded with the return value and the consent precondition, then the hold behavior, then the no-charge clarification. No sentence is redundant and nothing is buried.
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 mutating checkout tool with annotations covering the safety profile and no output schema, the description covers the return value (checkout URL), the consent prerequisite, and the hold/charge semantics. The main omission is any routing relative to get_upgrade_link, which matters given the sibling list.
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 100%, so the schema already documents all four parameters, including the enum meanings, promo-code/interval incompatibility, and the confirmationToken contract. The description adds only 'requested plan change' and no parameter detail, so the baseline 3 applies.
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?
Specific verb and resource: 'Returns a checkout URL for the requested plan change', which is concrete and distinct from generic upgrade/billing tools. However, it never differentiates itself from the sibling get_upgrade_link, which an agent could plausibly confuse with this tool, so it stops short of a 5.
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?
It states a precondition ('after explicit consent') and draws a boundary ('does not charge the account; payment occurs on the billing page'), which implies when the tool is appropriate. It gives no explicit when-not guidance and never names get_upgrade_link as the alternative for merely fetching an upgrade link, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
strengthen_applicationStrengthen a whole applicationADestructiveInspect
Improves an application's existing materials against its role and recorded career evidence, spending one refine allowance per changed asset. emphasis adding numbers, titles, employers, dates or credentials requires evidenceIds. Unsupported resume entry headers are rejected; previously completed asset edits are retained if a later asset fails.
| Name | Required | Description | Default |
|---|---|---|---|
| emphasis | No | What the person wants foregrounded, when they said. Omit otherwise. | |
| evidenceIds | No | Ids of the person's work-vault documents, or of facts on them, that support a claim the emphasis adds. | |
| applicationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| diff | Yes | |
| receipt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation: it discloses the cost model (one refine allowance per changed asset), an input precondition (evidenceIds required when emphasis adds numbers/titles/employers/dates/credentials), a rejection rule (unsupported resume entry headers), and partial-failure semantics (completed edits retained if a later asset fails). That is exactly the behavioral context an agent needs before a destructive multi-asset write.
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?
Three dense sentences, front-loaded with the core action and cost, then preconditions, then failure behavior. No filler, though the clause 'emphasis adding numbers, titles...' is grammatically compressed and takes a second read to parse as a conditional.
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 destructive mutation with an output schema present, the description covers cost, preconditions, rejection, and failure behavior. The main gap is absent guidance on when to prefer this over the sibling editing tools, but nothing needed to call it correctly is missing.
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 67% and the description meaningfully supplements it by defining the dependency between the two optional parameters: emphasis that introduces new factual claims requires evidenceIds. It does not clarify the applicationId parameter or the maxItems/format expectations, but it adds real cross-parameter 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?
States a specific verb ('Improves') and resource ('an application's existing materials') scoped to a role and recorded career evidence. It is distinguishable from narrow siblings like edit_resume or edit_cover_letter by operating on the whole application, though it never explicitly names which sibling it replaces.
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?
Usage context is implied through constraints (one refine allowance per changed asset, evidence needed for certain emphasis), but there is no explicit 'use this when / use X instead' guidance relative to update_application_materials, edit_resume, or generate_pack. The agent must infer the selection condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_lastUndo the last thing that can be undoneADestructiveInspect
Reverses the latest action with an available undo, or the action identified by taskId. Sent applications, settled charges, expired undo windows and actions without a reversible outcome are refused with a reason.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | No | Undo this specific task instead of the most recent one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real substance: the undoable-window concept, the 'picks the latest available' default, and the enumerated refusal classes with reasons. It stops short of saying whether the reversal is itself recoverable or what the refusal response looks like, but with annotations carrying the safety profile this is solid added context.
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?
A single tight sentence with the primary behavior front-loaded and the refusal conditions appended. Every clause carries information; nothing is repeated from the title or schema.
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?
With an output schema present, return format needn't be described, and the description covers the default selection rule and refusal classes. The remaining omission is interaction with the narrower restore/reopen siblings, which an agent would benefit from knowing.
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% and the taskId description already says 'instead of the most recent one,' so the description's mention of taskId adds little new detail. Baseline 3 applies; the description neither documents format nor failure behavior for an invalid taskId.
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?
States a specific verb and resource ('Reverses the latest action') plus the optional targeting mode via taskId. No sibling tool performs undo, so an agent can immediately place it as the general reversal primitive versus narrowly-scoped siblings like restore_match or restore_material.
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?
Gives explicit when-not conditions: sent applications, settled charges, expired undo windows, and non-reversible actions are refused. It clearly explains the default (latest undoable action) versus targeted use. It does not point at narrower restore/reopen siblings when those would be the more specific route, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_application_materialsUpdate application materialsADestructiveInspect
Updates an application's resume selection, resume or cover-letter contents or inclusion at the expected optimistic revision. Access is restricted to the Applications rollout cohort admitted by the API. Locked or conflicting revisions are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| resumeHtml | No | ||
| coverLetter | No | ||
| applicationId | Yes | Application ID | |
| resumeVariant | No | ||
| expectedRevision | Yes | ||
| coverLetterIncluded | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| materials | Yes | Revisioned, per-application material selection. Revision zero is the legacy fallback view; an Apply confirmation must persist a positive revision. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description goes beyond that by disclosing optimistic concurrency via expectedRevision, an access-cohort restriction, and refusal of locked or conflicting revisions. It stops short of saying what the destructive write actually overwrites (e.g. that supplied fields replace existing contents) or whether omitted fields are preserved.
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?
Three sentences, no filler, and the core action and its scope are front-loaded before the access and concurrency caveats. Every clause carries distinct 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?
An output schema exists, so return values need no explanation, and the description covers mutation semantics, concurrency control, and access gating for a 6-parameter destructive write. The remaining gap is whether this is a full or partial update and what happens to unspecified fields, which matters given destructiveHint=true.
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 only 17%, so the description must carry the load, and it does map most parameters to concepts: 'resume selection' (resumeVariant), 'resume or cover-letter contents' (resumeHtml, coverLetter), 'inclusion' (coverLetterIncluded), and 'expected optimistic revision' (expectedRevision), with applicationId implied by 'an application's'. It does not explain field formats, partial-update semantics for omitted fields, or how resumeVariant interacts with resumeHtml.
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 names a specific verb (updates) and enumerates the resource scope precisely: resume selection, resume contents, cover-letter contents, and cover-letter inclusion. It distinguishes this application-scoped material update from sibling resume/cover-letter editors such as edit_resume and edit_cover_letter by anchoring everything to 'an application', though it never explicitly names those siblings as alternatives.
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?
It states a real prerequisite (access restricted to the Applications rollout cohort admitted by the API) and a failure condition (locked or conflicting revisions are refused), which is useful context for deciding whether the call can succeed. However, it gives no guidance on when to use this tool versus edit_resume, edit_cover_letter, replace_application_document, or restore_material, leaving the agent to infer routing from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_autopilot_settingsChange Autopilot settingsAInspect
Changes the minimum Matches score from 50 to 97, with null restoring 70, the default-versus-tailored resume choice, or whether roles whose posted pay tops out below the profile's minimum salary are skipped. Explicit consent is required. Changes apply to waiting applications and are rechecked before submission. This does not enable or resume Autopilot, recall sent applications or retry stopped applications.
| Name | Required | Description | Default |
|---|---|---|---|
| scoreFloor | No | ||
| resumeVariant | No | ||
| confirmationToken | No | Echo the token from a previous `held` result to carry out the act it described, and only after the person has seen that result's summary and agreed to it. Send identical arguments: the token is bound to the exact call it was issued for, so a changed argument is held again with a fresh token and a fresh summary. It lasts two minutes and is spent once. | |
| requireSalaryMinimum | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered; the description adds real behavioral context beyond that — changes apply to waiting applications and are rechecked before submission, and null resets the floor to the default of 70. It does not explicitly state reversibility of the other two settings, which keeps it from a 5.
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 content is dense and front-loaded, with the exclusions and consent caveat placed after the core behavior. The first sentence is long and crams three settings into one clause, which slightly hurts scannability, but nothing is wasted.
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 4-parameter mutation tool with no output schema, the description covers what changes, the consent gate, the wait-and-recheck side effect, and what it deliberately does not do. The only gap is that it says nothing about the shape of a successful or held response, which an agent must infer the token flow for from the schema.
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 only 25% (only confirmationToken is documented), so the description must compensate — and it does, explaining the 50-97 scoreFloor range with null restoring 70, the default-versus-tailored resume choice, and that requireSalaryMinimum skips roles whose posted pay tops out below the profile minimum. This fully covers the three undocumented parameters, though it adds no format or interaction detail beyond their meaning.
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?
States a specific verb (changes) and enumerates exactly which Autopilot settings are mutable: score floor, resume variant, salary-minimum skipping. The closing sentence distinguishes it from siblings like set_autopilot by declaring 'This does not enable or resume Autopilot,' so the agent can separate the settings-editing tool from the enable/disable tool without opening any schema.
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?
Gives a clear precondition ('Explicit consent is required') and explicit when-not coverage (does not enable/resume, recall sent applications, or retry stopped ones). It stops short of naming the sibling tool to use for those excluded actions, but the boundary is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_communication_preferencesChange email preferencesADestructiveInspect
Changes the supplied optional email categories while preserving omitted settings. allOptionalEmailsOff:true must be supplied alone; conflicting category settings are refused. Disabling Autopilot result mail does not stop applications. Account, security, billing and essential employer mail are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| jobAlerts | No | ||
| productUpdates | No | ||
| autopilotResults | No | ||
| allOptionalEmailsOff | No | Turn every optional email off. Send it on its own. |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=true; the description goes further by disclosing that omitted settings are preserved, that conflicting category settings are refused, that disabling autopilot mail does not stop applications, and which mail categories are unaffected. It stops short of describing reversibility of disabled preferences or the response shape, but adds substantial value over the annotations.
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?
Four tightly packed sentences that each carry a distinct rule, with the core update behavior front-loaded. No filler, though the density makes it slightly list-like rather than flowing.
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?
An output schema exists so return values need no explanation, and the description covers the key mutation semantics, validation constraints, and side-effect nuances for a 4-parameter tool at 25% schema coverage. The main omission is explicit routing against the sibling preference-update tool.
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 only 25% schema coverage the description must compensate, and it does add meaning for allOptionalEmailsOff (must be supplied alone) and autopilotResults (does not stop applications). However it doesn't clarify jobAlerts or productUpdates semantics beyond the schema's enums, leaving half the parameters thinly covered.
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?
States a specific verb ('Changes') and resource ('supplied optional email categories') with the partial-update scope made explicit. It is clearly distinguishable from the read-only get_communication_preferences sibling, though it never names the update_preferences neighbor, so sibling routing is only implied.
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?
Provides operational rules (allOptionalEmailsOff must be sent alone, conflicts are refused) but no explicit when-to-use-this-vs-alternative guidance and no mention of the closely related update_preferences tool. Usage context is implied by the partial-update semantics rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_preferencesUpdate job preferencesADestructiveInspect
Merges the supplied preference fields into the account's stored preferences and refreshes matching. compensation.kind is open or minimum; minimum requires minimumAmount, an ISO-4217 currency and an hour or year period. seniorities accepts one override level; an empty list restores resume-derived seniority. excludedCompanies, excludedPlaces and excludedSeniorities replace the lists of companies, places and levels hidden from matches, alerts and Autopilot; an excludedPlaces name that cannot be placed refuses the write. Autopilot never applies below the pay floor or outside the accepted work modes. Work modes and relocation are stored together, with omitted values preserved.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| undo | Yes | |
| cancel | Yes | |
| object | Yes | |
| source | Yes | |
| status | Yes | |
| taskId | Yes | |
| webUrl | Yes | |
| handoff | Yes | |
| summary | Yes | |
| actionId | Yes | |
| createdAt | Yes | |
| revisionAfter | Yes | |
| revisionBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this destructive, and the description earns them: it discloses merge-vs-replace semantics per key, the fact that an unplaceable excludedPlaces name refuses the whole write, and that a null availability or compensation stops applications. These are consequences an agent cannot infer from the schema or the destructiveHint flag.
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?
Sentences are dense and mostly load-bearing, but the whole definition is one undifferentiated paragraph, and coverage of keys is uneven — multiple sentences on Autopilot and exclusions while many fields are never named. Front-loading of the merge semantic is good; scannability is not.
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?
An output schema exists, so return values need not be explained, and the destructive-merge semantics plus the key refusal case are covered. It falls short only in leaving several patch fields with no description-level behavior at all in an otherwise exhaustive treatment.
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 description adds real behavioral meaning for compensation, seniorities and the three exclusion lists (replace rather than append, resume-derived restore on empty). But a large share of the nested fields — dealBreakers, aiRoleInterest, preferredLocations, availability, coverLettersEnabled, tailoredResumesEnabled, targetFunctions — get no mention, so it only partially compensates for the reported 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 first sentence gives a specific verb and resource ('Merges the supplied preference fields into the account's stored preferences') plus the side effect ('refreshes matching'), which distinguishes it from get_preferences and parse_preferences_text in the sibling list.
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?
Usage context is implied through the field semantics and the instruction to pull current values 'from get_preferences' before replacing lists, which is genuinely actionable. However, there is no explicit statement of when to use this tool versus parse_preferences_text (free-text parsing) or update_autopilot_settings, so routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_profileUpdate profileADestructiveIdempotentInspect
Updates profile text fields such as name, email, phone and tone. Identity-bound changes require profileIdentityVersion matching the current profile snapshot. This endpoint does not upload a resume file.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| No | |||
| phone | No | ||
| tonePreferences | No | ||
| coverLettersEnabled | No | Whether generated application packs include a cover letter. false turns cover letters off; Autopilot then skips jobs that require one. | |
| tailoredResumesEnabled | No | Whether each application gets a resume rewritten for the role, on manual applies and Autopilot. false sends the default resume unless an application picked a version itself. | |
| expectedProfileIdentityVersion | No | Exact profileIdentityVersion from the prior get_profile snapshot used to prepare identity-bound changes; omit for a tone-only update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, destructive, and idempotent behavior. The description adds genuine context beyond them: this is a partial update of text fields only, and identity-bound edits are guarded by a snapshot version token, which signals an optimistic-concurrency/conflict failure mode. It still doesn't say what 'destructive' actually destroys or how a stale version is reported.
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?
Three sentences, front-loaded with what is changed, then the precondition, then the negative scope. No filler; each sentence carries a distinct fact, though the phrasing is slightly dense.
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 mutation tool with annotations covering the safety profile and no output schema, the description supplies the operating constraint (partial text-field update, version token for identity changes) an agent needs. It omits error behavior on version mismatch and whether omitted fields are preserved vs cleared.
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 only 43%, and the description covers exactly the four undocumented fields (name, email, phone, tone/tonePreferences), compensating for the gap. The remaining three booleans and the identity-version integer are documented in the schema itself, so nothing is left unexplained.
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?
States a specific verb (updates) and resource (profile) and enumerates the affected field families (name, email, phone, tone), which separates it from preference/autopilot siblings. The explicit 'does not upload a resume file' clause further scopes it away from upload_resume. It stops short of naming which sibling to use for non-text profile changes.
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?
It gives a real precondition ('identity-bound changes require profileIdentityVersion matching the current profile snapshot') and the schema adds the tone-only exception, but it never says when to prefer this over update_preferences, update_communication_preferences, or upload_resume, nor where to obtain the version token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_resumeUpload resumeADestructiveIdempotentInspect
Uploads original resume-file bytes encoded as base64 with PDF, DOCX, TXT, MD, PNG, JPG, JPEG or WEBP format and the current profileIdentityVersion. The server parses text, performs image OCR and generates PDF output. This replaces the account's main resume; stale identity versions are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | File format | |
| content | Yes | Base64-encoded file content. Send the raw file bytes, not converted text. | |
| filename | No | Original filename | |
| expectedProfileIdentityVersion | No | Exact profileIdentityVersion from the prior get_profile snapshot used to choose this resume. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, and the description adds meaningful context beyond them: the server parses text, performs OCR, generates PDF output, replaces the main resume, and refuses stale identity versions. That is substantive behavioral disclosure for a mutation 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?
Three sentences, front-loaded with the action and encoding, followed by processing behavior and the replacement/staleness constraint. No filler; every sentence carries 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?
With no output schema, the description still covers the processing pipeline and the replacement semantics, which is what an agent needs to call this safely. It could note auth/permission expectations or that OCR output may be lossy, but the core is complete.
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 100%, so the schema already documents content (base64), format enum, filename, and the identity-version parameter. The description restates the format list and references the current profileIdentityVersion but adds no syntax or constraints beyond the schema; baseline 3 applies.
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?
States a specific verb ('Uploads') and resource ('original resume-file bytes') plus the encoding and format scope. It distinguishes itself from generation tools by emphasizing 'original' bytes and 'replaces the account's main resume', though it does not explicitly name siblings like edit_resume or generate_resume.
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?
'This replaces the account's main resume' implies scope and that this is not for generated/edited resumes, but there is no explicit when-to-use vs the several sibling resume tools (edit_resume, format_resume, generate_resume). Usage is inferable rather than stated.
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.
2 tool updates
v0.1.3- Changed
get_autopilot_settings3 fields changed- added
Output schema / properties / requireSalaryMinimumAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / salaryMinimumAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "period": { + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "period" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - changed
Output schema / requiredPrevious value: -[ - "scoreFloor", - "scoreFloorDefault", - "resumeVariant" -]New value: +[ + "scoreFloor", + "scoreFloorDefault", + "resumeVariant", + "requireSalaryMinimum", + "salaryMinimum" +]
- Changed
update_autopilot_settings1 field changed- added
Input schema / properties / requireSalaryMinimumAdded value: +{ + "type": "boolean" +}
3 tool updates
v0.1.2- Changed
browse_listings1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Page size, 25 when omitted. Without a key or on the free plan the API caps it at 25."New value: +"Page size, 25 when omitted. Without a key, or when the account's plan caps it, the API returns at most 25."
- Added
get_market_pulse - Added
get_top_hiring_companies
5 tool updates
v0.1.1- Changed
get_preferences1 field changed- added
Output schema / properties / preferences / properties / tailoredResumesEnabledAdded value: +{ + "type": "boolean" +}
- Changed
get_profile1 field changed- changed
Output schema / properties / profile / properties / preferences / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "description": "Open-ended job-preferences JSON; documented keys are stable, unknown keys are allowed and expected.", - "properties": { - "acceptedWorkModes": { - "items": { - "enum": [ - "remote", - "hybrid", - "onsite" - ], - "type": "string" - }, - "type": "array" - }, - "address": { - "type": "string" - }, - "applicationProfile": { - "additionalProperties": false, - "description": "User-confirmed, country-specific work authorization and sponsorship answers used by onboarding and application adapters.", - "properties": { - "eligibility": { - "additionalProperties": false, - "properties": { - "countries": { - "items": { - "additionalProperties": false, - "properties": { - "authorized": { - "type": "boolean" - }, - "basis": { - "enum": [ - "citizen", - "permanent_resident", - "asylee_or_refugee", - "temporary_work_auth", - "not_authorized" - ], - "type": "string" - }, - "code": { - "description": "ISO-3166-1 alpha-2 country code", - "pattern": "^[A-Z]{2}$", - "type": "string" - }, - "requiresSponsorship": { - "type": "boolean" - } - }, - "required": [ - "code", - "authorized", - "requiresSponsorship", - "basis" - ], - "type": "object" - }, - "maxItems": 20, - "type": "array" - } - }, - "required": [ - "countries" - ], - "type": "object" - } - }, - "required": [ - "eligibility" - ], - "type": "object" - }, - "coverLettersEnabled": { - "type": "boolean" - }, - "dealBreakers": { - "items": { - "type": "string" - }, - "type": "array" - }, - "excludedCompanies": { - "items": { - "type": "string" - }, - "type": "array" - }, - "functions": { - "items": { - "type": "string" - }, - "type": "array" - }, - "locations": { - "items": { - "type": "string" - }, - "type": "array" - }, - "mailingAddress": { - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "formatted": { - "type": "string" - }, - "line1": { - "type": "string" - }, - "line2": { - "type": "string" - }, - "postalCode": { - "type": "string" - }, - "region": { - "type": "string" - }, - "regionCode": { - "type": "string" - }, - "source": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "line1", - "city", - "region", - "postalCode", - "country" - ], - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Structured mailing address captured from address autocomplete; null when cleared." - }, - "preferredLocations": { - "items": { - "type": "string" - }, - "type": "array" - }, - "preferredPlaces": { - "items": { - "additionalProperties": false, - "description": "Resolved city, region, and country metadata for a preferred work location.", - "properties": { - "city": { - "anyOf": [ - { - "maxLength": 120, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "countryCode": { - "pattern": "^[A-Z]{2}$", - "type": "string" - }, - "label": { - "maxLength": 160, - "minLength": 1, - "type": "string" - }, - "lat": { - "anyOf": [ - { - "maximum": 90, - "minimum": -90, - "type": "number" - }, - { - "type": "null" - } - ] - }, - "lng": { - "anyOf": [ - { - "maximum": 180, - "minimum": -180, - "type": "number" - }, - { - "type": "null" - } - ] - }, - "placeId": { - "anyOf": [ - { - "maxLength": 256, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "region": { - "anyOf": [ - { - "maxLength": 120, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "regionCode": { - "anyOf": [ - { - "maxLength": 12, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resolverVersion": { - "anyOf": [ - { - "maxLength": 64, - "minLength": 1, - "type": "string" - }, - { - "type": "null" - } - ] - }, - "source": { - "enum": [ - "google_places", - "gazetteer" - ], - "type": "string" - } - }, - "required": [ - "label", - "city", - "region", - "regionCode", - "countryCode", - "lat", - "lng", - "source" - ], - "type": "object" - }, - "type": "array" - }, - "remote": { - "type": "boolean" - }, - "remotePreference": { - "anyOf": [ - { - "enum": [ - "REMOTE", - "ONSITE" - ], - "type": "string" - }, - { - "type": "null" - } - ] - }, - "roles": { - "items": { - "type": "string" - }, - "type": "array" - }, - "salaryMax": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "salaryMin": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ] - }, - "willingToRelocate": { - "type": "boolean" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "description": "Open-ended job-preferences JSON; documented keys are stable, unknown keys are allowed and expected.", + "properties": { + "acceptedWorkModes": { + "items": { + "enum": [ + "remote", + "hybrid", + "onsite" + ], + "type": "string" + }, + "type": "array" + }, + "address": { + "type": "string" + }, + "applicationProfile": { + "additionalProperties": false, + "description": "User-confirmed, country-specific work authorization and sponsorship answers used by onboarding and application adapters.", + "properties": { + "eligibility": { + "additionalProperties": false, + "properties": { + "countries": { + "items": { + "additionalProperties": false, + "properties": { + "authorized": { + "type": "boolean" + }, + "basis": { + "enum": [ + "citizen", + "permanent_resident", + "asylee_or_refugee", + "temporary_work_auth", + "not_authorized" + ], + "type": "string" + }, + "code": { + "description": "ISO-3166-1 alpha-2 country code", + "pattern": "^[A-Z]{2}$", + "type": "string" + }, + "requiresSponsorship": { + "type": "boolean" + } + }, + "required": [ + "code", + "authorized", + "requiresSponsorship", + "basis" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" + } + }, + "required": [ + "countries" + ], + "type": "object" + } + }, + "required": [ + "eligibility" + ], + "type": "object" + }, + "coverLettersEnabled": { + "type": "boolean" + }, + "dealBreakers": { + "items": { + "type": "string" + }, + "type": "array" + }, + "excludedCompanies": { + "items": { + "type": "string" + }, + "type": "array" + }, + "functions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "locations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "mailingAddress": { + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "formatted": { + "type": "string" + }, + "line1": { + "type": "string" + }, + "line2": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "region": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "source": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "line1", + "city", + "region", + "postalCode", + "country" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Structured mailing address captured from address autocomplete; null when cleared." + }, + "preferredLocations": { + "items": { + "type": "string" + }, + "type": "array" + }, + "preferredPlaces": { + "items": { + "additionalProperties": false, + "description": "Resolved city, region, and country metadata for a preferred work location.", + "properties": { + "city": { + "anyOf": [ + { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "countryCode": { + "pattern": "^[A-Z]{2}$", + "type": "string" + }, + "label": { + "maxLength": 160, + "minLength": 1, + "type": "string" + }, + "lat": { + "anyOf": [ + { + "maximum": 90, + "minimum": -90, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "lng": { + "anyOf": [ + { + "maximum": 180, + "minimum": -180, + "type": "number" + }, + { + "type": "null" + } + ] + }, + "placeId": { + "anyOf": [ + { + "maxLength": 256, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "region": { + "anyOf": [ + { + "maxLength": 120, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "regionCode": { + "anyOf": [ + { + "maxLength": 12, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "resolverVersion": { + "anyOf": [ + { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + { + "type": "null" + } + ] + }, + "source": { + "enum": [ + "google_places", + "gazetteer" + ], + "type": "string" + } + }, + "required": [ + "label", + "city", + "region", + "regionCode", + "countryCode", + "lat", + "lng", + "source" + ], + "type": "object" + }, + "type": "array" + }, + "remote": { + "type": "boolean" + }, + "remotePreference": { + "anyOf": [ + { + "enum": [ + "REMOTE", + "ONSITE" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "salaryMax": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "salaryMin": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "tailoredResumesEnabled": { + "type": "boolean" + }, + "willingToRelocate": { + "type": "boolean" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
update_autopilot_settings1 field changed- changed
Input schema / properties / scoreFloor / anyOfPrevious value: -[ - { - "maximum": 97, - "minimum": 70, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 97, + "minimum": 50, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
update_preferences1 field changed- added
Input schema / properties / patch / properties / tailoredResumesEnabledAdded value: +{ + "description": "Whether each application gets a resume rewritten for the role, on the person's own Apply and on Autopilot. False sends their default resume instead, unless they picked a version on that application.", + "type": "boolean" +}
- Changed
update_profile1 field changed- added
Input schema / properties / tailoredResumesEnabledAdded value: +{ + "description": "Whether each application gets a resume rewritten for the role, on manual applies and Autopilot. false sends the default resume unless an application picked a version itself.", + "type": "boolean" +}
69 tool updates
v0.1.0- First observed
add_contact - First observed
add_jobs - First observed
apply - First observed
browse_listings - First observed
cancel_apply - First observed
confirm_hypothesis - First observed
dismiss_match - First observed
edit_answer - First observed
edit_cover_letter - First observed
edit_resume - First observed
forget_hypothesis - First observed
format_resume - First observed
generate_outreach - First observed
generate_pack - First observed
generate_resume - First observed
get_application_documents - First observed
get_application_materials - First observed
get_application_readiness - First observed
get_application_status - First observed
get_autopilot_settings - First observed
get_autopilot_status - First observed
get_career_record - First observed
get_communication_preferences - First observed
get_generated_resumes - First observed
get_inbox - First observed
get_job - First observed
get_listing - First observed
get_pack_status - First observed
get_pipeline - First observed
get_platform_context - First observed
get_preferences - First observed
get_profile - First observed
get_resume_download_link - First observed
get_resume_work_history - First observed
get_stats - First observed
get_task - First observed
get_unread_reminders - First observed
get_updates_since - First observed
get_upgrade_link - First observed
get_usage - First observed
import_job - First observed
list_contacts - First observed
list_dismissed_matches - First observed
list_interviews - First observed
list_matches - First observed
list_tasks - First observed
mark_applied_offsite - First observed
mark_messages_read - First observed
move_pipeline - First observed
parse_preferences_text - First observed
prepare_applications - First observed
remember_hypothesis - First observed
reopen_application_materials - First observed
replace_application_document - First observed
reply_to_recruiter - First observed
restore_match - First observed
restore_material - First observed
save_application_answers - First observed
save_job - First observed
set_autopilot - First observed
start_checkout - First observed
strengthen_application - First observed
undo_last - First observed
update_application_materials - First observed
update_autopilot_settings - First observed
update_communication_preferences - First observed
update_preferences - First observed
update_profile - First observed
upload_resume
TDQS
Scored across 71 tools
The set has many overlapping read/write surfaces around applications and materials, such as get_application_materials, get_application_documents, get_generated_resumes, get_pack_status, generate_resume, generate_pack, prepare_applications, edit_resume, update_application_materials, and replace_application_document. Job-entry tools like save_job, add_jobs, import_job, mark_applied_offsite, and apply also require careful reading to distinguish. The detailed descriptions help, but the boundaries are too dense for a 71-tool surface.
Names are overwhelmingly snake_case and usually follow a predictable verb_noun pattern such as get_, list_, update_, and generate_. Minor deviations such as bare apply and singular/plural inconsistency in save_job versus add_jobs and add_contact versus list_contacts keep it from being fully consistent.
Seventy-one tools is far beyond a well-scoped MCP surface, with many micro-reads and overlapping lifecycle variants. This creates a high tool-selection and context burden and should be consolidated into fewer, broader tools.
The surface covers job discovery, matching, pipeline management, applications, material generation/editing/download, recruiter messaging, contacts, outreach, profile/resume, preferences, Autopilot, tasks, stats, billing, and market context. Some minor lifecycle gaps remain, such as contact edit/delete and richer interview operations, but agents can work around them.
Maintenance
Related MCP Connectors
Manage job applications — jobs, companies, boards, notes, and profile — from your AI client.
Job applications done for you: check applications and interviews, get prep, apply to a job by URL.
Job search for your AI: save jobs, research companies, keep stories, track applications.
Analyze job listings against your resume, track applications, and generate cover letters.
Related MCP Servers
- AlicenseAqualityBmaintenanceAI job search and job application tracker. Search live jobs by title, location, salary, date posted, and remote or on-site, and see each one checked on real data: pay against market rates, ghost-job signals, visa sponsorship history, and how well it matches your resume. Check how hiring software reads your resume, track applications, set follow-up reminders, and get email alerts.124443 npmISC

Civify MCP Serverofficial
AlicenseAqualityBmaintenanceEnables AI agents to parse resumes, tailor CVs, score ATS compatibility, redact PII, scrape job postings, and track applications through a career platform.818 npmAGPL 3.0- AlicenseNot gradedqualityBmaintenanceEnables AI agents to discover postings from watched company boards ranked by keyword fit, tailor and fact-check resumes against a source-cited profile, render ATS-readable PDFs, submit applications through the user's own browser, and track replies and follow-ups. All ranking, claim checking and email classification run as plain code, so LLM tokens are spent only on writing.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI clients to search job listings and manage career profile data such as work experiences, job summaries, career goals, and technical skills. Some career-management tools require an API key.MIT