instaffo-mcp-server
instaffo-mcp-server
一个 MCP 服务器,让 AI 助手能够访问您自己的 Instaffo 候选人账户,并使用您自己的浏览器会话进行身份验证。个人求职工具。完全本地运行。
Instaffo 是一个双向招聘市场(候选人与公司匹配)。此服务器暴露候选人端:从 MCP 客户端读取您的个人资料、职位建议、对话,并执行可逆的写入操作。
工作原理
Instaffo 没有公开的候选人 API,因此服务器使用真实的已登录会话进行身份验证。其候选人 Web 应用通过 app.instaffo.com/candidate/api/v1/* 下的干净 JSON API 进行通信,仅通过会话 cookie 进行身份验证(无 bearer 令牌)。因此,服务器是一个轻量级的、基于 cookie 认证的 httpx 客户端,而非爬虫。浏览器(通过 patchright)仅用于登录时创建会话的一次性使用。
MCP client ── stdio ──> instaffo-mcp-server ──cookie──> app.instaffo.com JSON API
│
storage-state.json (cookies, written 0600, git-ignored)
▲
instaffo-mcp --login (one-time browser sign-in)Related MCP server: LinkedIn MCP Server
设置
uv sync
uv run patchright install chromium # one-time, for login only
uv run instaffo-mcp --login # opens a browser; sign in once
uv run instaffo-mcp --auth-status # confirm the session is stored在您的 MCP 客户端(stdio)中注册它:
{
"command": "uv",
"args": ["run", "--directory", "/path/to/instaffo-mcp-server", "instaffo-mcp"]
}工具
读取(无副作用):
工具 | 返回内容 |
| 您的身份信息(姓名、邮箱、职位) |
| 您的个人资料:资历、地点、技能、简历摘要 |
| 您当前的匹配结果,附计数 |
| 一个职位的完整信息:描述、要求、薪资、筛选问题 |
| 公司请求(入站兴趣)和您的申请 |
| 是否存在会话( |
| 在 Instaffo 的封闭词汇表中查找技能 UUID |
写入(每个写入工具都接受 confirm 参数;没有它不会发起网络请求,您将收到将要发送的确切载荷):
工具 | 效果 | 端点 |
| 收藏/取消收藏一个职位建议 |
|
| 替换“关于我”文本 |
|
| 替换技能集 |
|
| 替换语言列表 |
|
| 替换行业经验 |
|
| 替换社交链接 |
|
| 设置工作经验级别 |
|
| 年薪资期望 |
|
| 目标职位(驱动匹配) |
|
| 活跃/被动状态 |
|
| 添加工作或教育经历 |
|
| 原地编辑一条经历 |
|
| 删除一条经历(不可逆) |
|
| 每项技能的经验年数 |
|
所有端点均通过观察得到,而非猜测。构建这些端点所依据的契约记录在 docs/API.md 中,带有日期,源自录制的捕获数据。
为什么每次写入后都要重新读取
此 API 对每次写入都返回裸 {"success": true},且仅进行部分验证——即使 PATCH 请求缺少必填字段或包含错误类型的值,也会返回 {"success": true}。因此,响应无法告诉您实际存储了什么。每个写入工具都会重新读取 GET /profile 并报告 verified 和 value_now;请相信这些,而不是响应。
在调用任何工具之前,有两个字段陷阱值得了解:
instaffo_set_skills会重新在服务端推导topSkills。 没有可发送的topSkills字段,也没有 UI 控件。即使技能集未更改,保存操作仍会移动前三项。技能上限为 23 个(
skills20 个 +topSkills3 个)。超过此限制会返回"maximum is 20 characters"——消息说的是字符,但单位是项。
有监督的,故意为之:申请和消息
有两个操作被故意未实现为即发即弃的工具:申请职位和给招聘人员发送消息。
申请并非单个请求。它是一个多步骤向导,在提交之前会先对您的真实个人资料进行持久的自我展示写入:
技能自我评估(每项所需技能的年数滑块,例如 0-5),通过
experience_durations/bulk_save自动保存到您的个人资料,您的薪资期望(从您的个人资料预填),
“您使用的 AI 工具”和“AI 技能”多选,
最终提交,创建申请并打开与招聘人员的聊天。
因为这些是真实、面向外部的、关于您如何展示自己的选择,并且最终提交的端点只有在整个流程完成后才会出现,所以申请和消息工具留给了有监督的会话,由账户所有者批准输入。它们不是基于猜测的端点构建的。观察到的子步骤和向导形态已记录在此,以便该会话能够快速进行。
命令
instaffo-mcp # run the MCP server (stdio)
instaffo-mcp --login # headed manual login, persist the session
instaffo-mcp --capture # record app API traffic to a JSONL (diagnostics)
instaffo-mcp --auth-status [--deep]安全与隐私
会话材料(
profile/、storage-state.json、captures/、.env)位于~/.instaffo-mcp下,权限为0600,并被 git 忽略。永远不会被提交。写入工具有确认限制,且仅影响可逆的表面。
这是仅供您自己账户使用的个人本地工具。它不存储任何其他人的数据,并且仅使用您自己的会话与 Instaffo 通信。
先前的作品
会话捕获和浏览器模式在精神上改编自 stickerdaniel/linkedin-mcp-server(Apache-2.0),该作品以相同方式对个人 LinkedIn 会话进行身份验证。
Available Tools
10 toolsinstaffo_auth_statusInstaffo Auth StatusARead-only
Report whether a usable Instaffo session is present.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | When true, launch a browser and confirm the session against the live app (authoritative but slow). When false (default), only read the on-disk session snapshot (fast, no browser). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains both operational modes (deep=true launches browser, deep=false uses snapshot), adding behavioral context beyond annotations (readOnlyHint, openWorldHint). No contradiction.
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 sentence efficiently conveys the tool's purpose and behavior, front-loaded and without 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?
For a simple status tool with an output schema, the description completely covers both parameter behaviors and the tool's overall function.
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% with parameter 'deep' described. The description adds meaningful context about its behavior (browser launch vs snapshot), enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports whether a usable Instaffo session is present, which is a distinct purpose from sibling tools (e.g., instaffo_login, instaffo_whoami).
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 does not provide guidance on when to use this tool versus alternatives or when not to use it. For a status check tool, it is implicit but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_get_job_suggestionInstaffo: get one job suggestionARead-only
Full detail for one job suggestion, by its job_uuid (from the list tool).
Includes the role description, requirements, process, salary band, skills, and the screening questions that applying will require answering.
| Name | Required | Description | Default |
|---|---|---|---|
| job_uuid | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and description adds value by listing included fields (role, requirements, salary, etc.). No contradictions; adequately discloses 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: first states purpose, second enumerates contents. No wasted text, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a detail retrieval tool with output schema, the description covers key content areas. No missing elements expected for this operation.
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 parameter job_uuid lacks schema description (0% coverage). Description adds meaningful context by noting it comes from the list tool, aiding understanding of expected value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Full detail for one job suggestion', clearly specifying verb and resource. It distinguishes from the sibling list tool by referencing 'from the list tool', making its scope 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?
Explicitly instructs to use the job_uuid from the list tool, providing clear prerequisite context. Does not mention alternatives but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_get_profileInstaffo: get my profileARead-only
Return the candidate's Instaffo profile: seniority, location, skills, CV.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true and openWorldHint: true, so description need not reiterate. It adds value by listing returned fields, but does not disclose error conditions or authentication requirements beyond 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?
Single efficient sentence of 9 words with no superfluous information. Front-loaded with verb and resource.
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?
Output schema exists, so description does not need to explain return values. It lists key fields (seniority, location, skills, CV) which covers the essential profile information. Could mention authentication state but not required given simplicity.
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?
Input schema has zero parameters and schema coverage is 100%, so no parameter documentation needed. Baseline for 0 parameters is 4; description adds nothing but not required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Return the candidate's Instaffo profile' with specific fields listed (seniority, location, skills, CV). This clearly identifies the resource and action, though it does not distinguish this from siblings like instaffo_whoami or instaffo_auth_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?
No guidance on when to use this tool versus alternatives. Does not specify prerequisites, filtering, or context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_list_conversationsInstaffo: list conversationsARead-only
List chats: company requests (inbound interest) and your job applications.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description does not need to restate safety. It adds value by specifying the types of chats (inbound interest and applications), giving behavioral 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?
The description is a single, clear sentence that immediately communicates the action and scope. It is front-loaded with 'List chats' and provides the categories concisely, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema is provided, the description sufficiently covers the tool's purpose. It clearly states what is listed (chats) and the included categories, requiring no additional context for a simple listing 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 input schema has no parameters and is fully documented. With 0 parameters, the baseline score is 4, and the description does not need to add parameter-level details. No additional semantics are required.
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 'list' and resource 'chats', and clearly distinguishes two types: company requests and job applications. This sets it apart from sibling tools like auth or job saving, which have different verbs and resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, recommended contexts, or situations where other tools should be preferred, leaving the agent without decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_list_job_suggestionsInstaffo: list job suggestionsARead-only
List the candidate's current job suggestions (the matches shown in-app).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds that it shows 'the matches shown in-app', providing context. However, no additional behavioral details like pagination or filtering are given, which is acceptable for a read-only list with no parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and efficient. Every word adds value, with no 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?
Given zero parameters and an existing output schema (not shown but present), the description is complete for a simple list tool. It explains what the tool does (list suggestions) and implicitly its context (in-app matches). Missing details about return structure are covered by the output 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?
The input schema has zero parameters and 100% description coverage, so the description need not add parameter details. Baseline 4 applies as no additional semantics are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the candidate's current job suggestions, matching the app's display. It distinguishes itself from the sibling 'instaffo_get_job_suggestion' which retrieves a single suggestion, thus avoiding confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving the current set of job suggestions. While it provides clear context, it does not explicitly state when not to use it or mention alternatives, though for a simple list tool this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_loginInstaffo Login InstructionsCRead-only
Explain how to establish a session (interactive, runs in a terminal).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims interactive terminal session establishment, implying state change, but annotations set readOnlyHint=true. This is a direct contradiction between description and 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?
Single sentence, concise. However, key information about the tool's actual effect is missing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the contradiction and lack of clarity on whether it performs login or explains it, the description is incomplete. Output schema exists but is not leveraged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. The description adds context that it is interactive and terminal-based, which is helpful but not critical.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it explains how to establish a session, tying directly to login. However, it is ambiguous whether it performs the login or merely provides instructions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like instaffo_auth_status. The description does not mention prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_save_jobInstaffo: save a jobA
Bookmark (favorite) a job suggestion. Reversible with instaffo_unsave_job.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | must be true to perform the write; false returns a preview. | |
| job_uuid | Yes | the job's uuid (from instaffo_list_job_suggestions). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the operation is reversible and hints at a preview mechanism via the confirm parameter. It does not contradict the annotation (openWorldHint). No mention of authentication requirements or error states, but the core behavior is transparent.
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 main action, no unnecessary words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple bookmarking tool, the description covers the main behavior, reversibility, and preview. It does not mention error cases or output schema details (though output schema exists), but is adequate given the tool's simplicity.
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. The description adds value by noting the source of job_uuid (from instaffo_list_job_suggestions) and confirming the preview behavior of confirm, improving semantic clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (bookmark/favorite) and resource (job suggestion), and distinguishes it from sibling instaffo_unsave_job by mentioning reversibility.
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 explicitly mentions the reverse operation, guiding when to use this vs instaffo_unsave_job. It does not mention prerequisites (e.g., login status) or alternatives beyond the reversal, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_set_skill_experienceInstaffo: set skill experienceA
Set your years-of-experience for one or more skills on your profile.
This writes to your real profile. Durations are 0-5 (5 means 5+). Only submit truthful values. Without confirm=true it returns a preview.
| Name | Required | Description | Default |
|---|---|---|---|
| skills | Yes | List of {"uuid": <skill uuid>, "duration": <years 0-5>}. Skill uuids come from a job's screening/prequalification data. | |
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states the write behavior ('This writes to your real profile') and the preview mode, adding significant behavioral context beyond the openWorldHint annotation. There is no contradiction with 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?
The description is three focused sentences with no waste. It front-loads the purpose, then adds key specifics. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality and preview behavior. It does not explain the preview response format, but an output schema exists. The mention of skill UUID source is in the schema but not description, which is a minor gap. Overall complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds critical meaning: 'Durations are 0-5 (5 means 5+).' and explains the confirm parameter's effect. With only 50% schema description coverage, the description compensates effectively by clarifying value ranges and 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?
The description clearly states the tool's function: 'Set your years-of-experience for one or more skills on your profile.' It uses a specific verb ('Set') and identifies the resource ('skills on your profile'). No sibling tool performs this action, so it distinguishes well.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use the confirm parameter ('Without confirm=true it returns a preview') and advises to submit truthful values. It doesn't explicitly mention alternatives because no alternatives exist among siblings. Context is clear, but could add prerequisites (e.g., skill UUIDs from job screening data).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_unsave_jobInstaffo: unsave a jobA
Remove a job from your bookmarks. Reverses instaffo_save_job.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | must be true to perform the write; false returns a preview. | |
| job_uuid | Yes | the job's uuid. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states a clear write operation ('Remove'), but beyond the 'confirm' parameter behavior hinted in schema, no additional side effects or constraints beyond annotations (openWorldHint) are disclosed.
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 concise, front-loaded sentences with zero unnecessary 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?
For a simple mutation tool with output schema, the description sufficiently covers purpose, relation to save, and the need for confirmation.
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. Description adds no extra parameter meaning beyond what schema already 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?
Clearly states verb 'Remove', resource 'job from bookmarks', and explicitly references its inverse sibling 'instaffo_save_job', making its distinct purpose obvious.
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?
Implicitly tells when to use (to reverse a save) via 'Reverses instaffo_save_job', but lacks explicit when-not-to-use or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instaffo_whoamiInstaffo: who am IARead-only
Return the signed-in candidate's basic identity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it returns 'basic identity', implying a limited dataset, but does not disclose other behavioral traits like authentication requirements or potential latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded with the verb and resource. Every part 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?
Given the tool's simplicity (no params, output schema exists), the description is mostly adequate. It mentions 'signed-in candidate', implying authentication context, but could hint at the specific data fields returned, though output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100%. The description does not need to explain parameters. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Return the signed-in candidate's basic identity' uses a specific verb ('Return') and resource ('signed-in candidate's basic identity'), clearly distinguishing from siblings like instaffo_get_profile (full profile) and instaffo_auth_status (auth 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?
No guidance is provided on when to use this tool versus alternatives such as instaffo_get_profile or instaffo_auth_status. The description only states functionality without contextual usage advice.
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.
10 tool updates
v0.1.0- First observed
instaffo_auth_status - First observed
instaffo_get_job_suggestion - First observed
instaffo_get_profile - First observed
instaffo_list_conversations - First observed
instaffo_list_job_suggestions - First observed
instaffo_login - First observed
instaffo_save_job - First observed
instaffo_set_skill_experience - First observed
instaffo_unsave_job - First observed
instaffo_whoami
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose, with no overlap between listing, getting details, saving/unsaving jobs, managing profile skills, or authentication.
All tools follow a consistent 'instaffo_verb_noun' pattern, making the action and target clear for each tool.
10 tools cover the core functionalities of a job-seeking assistant (auth, profile, job suggestions, conversations) without being excessive or insufficient.
The set covers most key operations but lacks a tool for applying to jobs, which is a significant gap for automated job search workflows.
Maintenance
Related MCP Connectors
Let AI agents use your real, signed-in Chrome: tabs, clicks, forms, screenshots and video.
The career management plugin for your own AI assistant: CVs, cover letters, interviews and more.
1LinkedIn jobs, companies and people for AI agents, plus messages and invites via your own account.
Connect AI agents to your own Chrome with scoped access, approvals, and verified task results.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to search and apply for jobs on Handshake, track applications, and research employers using your browser session.122MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to read LinkedIn profiles, company pages, jobs, messages, and feed through a user's logged-in browser session.19Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI assistants to access LinkedIn data through the user's logged-in browser session, supporting profiles, companies, job searches, messaging, and feed/posts.21Apache 2.0
- AlicenseAqualityCmaintenanceEnables AI assistants to browse profiles and companies, manage messages and inboxes, and search jobs, posts, and people through a locally logged-in browser session. All actions run on the user's own machine.19Apache 2.0