Skip to main content
Glama
esinecan

instaffo-mcp-server

by esinecan

instaffo-mcp-server

AI 어시스턴트가 자신의 브라우저 세션으로 인증된 Instaffo 후보자 계정에 접근할 수 있게 해주는 MCP 서버입니다. 개인 구직 도구입니다. 완전히 로컬에서 실행됩니다.

Instaffo는 양방향 채용 마켓플레이스입니다(후보자와 기업이 매칭됨). 이 서버는 후보자 측면을 노출합니다: MCP 클라이언트에서 프로필과 구직 제안을 읽고, 대화를 읽으며, 되돌릴 수 있는 쓰기 작업을 수행합니다.

작동 방식

Instaffo에는 공개 후보자 API가 없으므로, 서버는 실제 로그인된 세션으로 인증합니다. 후보자 웹 앱은 app.instaffo.com/candidate/api/v1/* 아래의 깔끔한 JSON API와 통신하며, 세션 쿠키로만 인증됩니다(베어러 토큰 없음). 따라서 서버는 스크래퍼가 아닌, 얇은 쿠키 인증 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_whoami

신원 정보(이름, 이메일, 직함)

instaffo_get_profile

프로필: 경력, 위치, 기술, 이력서 요약

instaffo_list_job_suggestions

현재 매칭 결과와 카운터

instaffo_get_job_suggestion

한 건의 역할 상세: 설명, 요구사항, 연봉, 스크리닝 질문

instaffo_list_conversations

기업 요청(인바운드 관심) 및 지원 내역

instaffo_auth_status

세션 존재 여부(--deep은 실시간 검증)

instaffo_search_skills

Instaffo의 폐쇄형 어휘에서 기술 UUID 조회

쓰기(모든 쓰기 도구는 confirm을 받습니다; 없으면 네트워크 호출 없이 전송될 정확한 페이로드가 반환됩니다):

도구

효과

엔드포인트

instaffo_save_job / instaffo_unsave_job

제안 북마크

POST|DELETE .../job_suggestions/{uuid}/favorite

instaffo_set_about

자기소개 텍스트 교체

POST .../profile/about

instaffo_set_skills

기술 세트 교체

POST .../profile/skills

instaffo_set_languages

언어 목록 교체

POST .../profile/languages

instaffo_set_industries

업계 경험 교체

POST .../profile/industries

instaffo_set_links

소셜 링크 교체

POST .../profile/links

instaffo_set_seniority

업무 경력 수준 설정

POST .../profile/professional_background

instaffo_set_salary

연봉 기대치

PATCH .../factors/salary

instaffo_set_job_roles

목표 역할(매칭에 영향)

PATCH .../factors/job_roles

instaffo_set_job_seeking_activity

활성/수동 상태

PATCH .../factors/job_seeking_activity

instaffo_add_cv_station

경력 또는 학력 항목 추가

POST .../cv

instaffo_update_cv_station

항목 수정

PATCH .../cv/{uuid}

instaffo_delete_cv_station

항목 삭제(되돌릴 수 없음)

DELETE .../cv/{uuid}

instaffo_set_skill_experience

기술별 경력 연수

POST .../experience_durations/bulk_save

모든 엔드포인트는 추측이 아닌 관찰을 기반으로 합니다. 이들이 구축된 계약은 docs/API.md에 있으며, 기록된 캡처에서 파생되었습니다.

모든 쓰기 작업이 다시 읽는 이유

이 API는 모든 쓰기 작업에 대해 {"success": true}만 반환하며, 부분적으로만 검증합니다 — 필수 필드가 누락되거나 잘못된 타입의 값이 있는 PATCH도 {"success": true}를 반환합니다. 따라서 응답만으로는 무엇이 저장되었는지 알 수 없습니다. 각 쓰기 도구는 GET /profile을 다시 읽고 verified와 value_now를 보고합니다; 응답이 아닌 이 값을 신뢰하세요.

호출 전에 알아야 할 두 가지 필드 함정:

  • instaffo_set_skills는 서버 측에서 topSkills를 다시 파생합니다. 보낼 topSkills 필드나 UI 컨트롤이 없습니다. 기술 세트가 변경되지 않은 저장도 상위 세 개를 이동시켰습니다.

  • 기술은 23개로 제한됩니다 (skills 20개 + topSkills 3개). 초과 시 "maximum is 20 characters"가 반환됩니다 — 메시지는 문자라고 하지만 단위는 항목입니다.

의도적으로 감독됨: 지원 및 메시지

두 가지 작업은 의도적으로 실행 후 망각형 도구로 구현되지 않았습니다: 구직 지원과 채용 담당자에게 메시지 보내기.

지원은 단일 요청이 아닙니다. 제출 전에 실제 프로필에 지속적인 자기 표현을 작성하는 여러 단계의 마법사입니다:

  1. 기술 자기 평가(필요 기술별 연도 슬라이더, 예: 0-5) - experience_durations/bulk_save를 통해 프로필에 자동 저장됨,

  2. 연봉 기대치(프로필에서 미리 채워짐),

  3. "사용하는 AI 도구" 및 "AI 기술" 다중 선택,

  4. 지원서를 생성하고 채용 담당자와의 채팅을 여는 최종 제출.

이는 자신을 표현하는 실제 대외적인 선택이며, 최종 제출 엔드포인트는 전체 흐름이 완료된 후에만 나타나므로, 지원 및 메시지 도구는 계정 소유자가 입력을 승인하는 감독 세션을 위해 남겨둡니다. 추측된 엔드포인트를 기반으로 구축되지 않았습니다. 관찰된 하위 단계와 마법사 형태는 빠른 세션을 위해 여기에 기록되어 있습니다.

명령어

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 tools
instaffo_auth_statusInstaffo Auth StatusA
Read-only

Report whether a usable Instaffo session is present.

NameRequiredDescriptionDefault
deepNoWhen 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

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 suggestionA
Read-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.

NameRequiredDescriptionDefault
job_uuidYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 profileA
Read-only

Return the candidate's Instaffo profile: seniority, location, skills, CV.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 conversationsA
Read-only

List chats: company requests (inbound interest) and your job applications.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 suggestionsA
Read-only

List the candidate's current job suggestions (the matches shown in-app).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 InstructionsC
Read-only

Explain how to establish a session (interactive, runs in a terminal).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
confirmNomust be true to perform the write; false returns a preview.
job_uuidYesthe job's uuid (from instaffo_list_job_suggestions).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
skillsYesList of {"uuid": <skill uuid>, "duration": <years 0-5>}. Skill uuids come from a job's screening/prequalification data.
confirmNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
confirmNomust be true to perform the write; false returns a preview.
job_uuidYesthe job's uuid.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 IA
Read-only

Return the signed-in candidate's basic identity.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 10 tool updatesv0.1.0
    • First observedinstaffo_auth_status
    • First observedinstaffo_get_job_suggestion
    • First observedinstaffo_get_profile
    • First observedinstaffo_list_conversations
    • First observedinstaffo_list_job_suggestions
    • First observedinstaffo_login
    • First observedinstaffo_save_job
    • First observedinstaffo_set_skill_experience
    • First observedinstaffo_unsave_job
    • First observedinstaffo_whoami

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, with no overlap between listing, getting details, saving/unsaving jobs, managing profile skills, or authentication.

Naming Consistency5/5

All tools follow a consistent 'instaffo_verb_noun' pattern, making the action and target clear for each tool.

Tool Count5/5

10 tools cover the core functionalities of a job-seeking assistant (auth, profile, job suggestions, conversations) without being excessive or insufficient.

Completeness3/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers