Skip to main content
Glama
zvieli
by zvieli

ユニバーサル・マルチソース求人検索 FastMCP Server (job-mcp)

Python 3.12+ FastMCP 2.0+ Tests Passing License: MIT

エンタープライズ向け、プライバシー最優先の FastMCP サーバーです。HireMeTech、Comeet ATS、AllJobs Israel を横断して、インテリジェントなマルチソース技術求人集約、スマートな重複排除、動的なCVスキル抽出、要件カバレッジスコアリング、自律的な求人応募ワークフローを提供します。


アーキテクチャ概要

graph TD
    Client([MCP Client: Claude / Cursor / Gemini Spark / Antigravity]) --> Tools[FastMCP Server Layer]
    Tools --> Aggregator[JobAggregator]
    Aggregator --> Registry[SourceRegistry]

    subgraph Parallel Pluggable Sources Layer
        Registry --> S1[HireMeTechSource<br/>Direct REST API + Session Fallback]
        Registry --> S2[ComeetSource<br/>Direct ATS API + Concurrency Semaphore]
        Registry --> S3[AllJobsSource<br/>Category Feeds + Anti-Blocking Headers]
    end

    subgraph Processing & Normalization Engine
        S1 --> Dedup[Deduplication & Entity Merger]
        S2 --> Dedup
        S3 --> Dedup
        
        Dedup --> NormKey["Key = slug(title) + '@' + slug(company)"]
        NormKey --> Merge[Metadata & Links Merger]
        Merge --> Scorer[Unified CV / Skill Matcher]
    end

    subgraph Dynamic Candidate Engine
        CV["Candidate CV (.pdf / .docx / .txt)"] --> Extractor[Dynamic CV & Profile Extractor]
        Extractor --> Skills["Extracted Skills (40+ tokens)"]
        Extractor --> Seniority["Inferred Seniority & Exclusions"]
        Extractor --> Roles["Target Job Roles"]
        Skills --> Scorer
        Seniority --> Scorer
    end

    Scorer --> Cache[Unified JobCache - 1h TTL]
    Cache --> Tools

Related MCP server: MCP Job Application Tracker & Resume Customizer

主な機能

  1. 動的CV / 候補プロフィール抽出:

    • マルチフォーマット取り込み: .pdf(pypdf利用)、.docx(python-docx利用)、.txt ファイルに対応。

    • NLPスキル・チャンキングと動的辞書: 壊れやすいハードコーディングなしに40以上の技術スキルを発見・抽出し、複雑な複合語テクノロジー(例: FastAPI、LangGraph、PostgreSQL、Smart Contracts、GraphRAG)をサポートします。

    • 自動シニアリティ検出・除外検出: 候補者のシニアリティ(Junior、Mid、Senior、Lead、Principal、Director)を正確に推定し、ミスマッチな求人を除外するためのインテリジェントな否定キーワードを生成します。

    • ストップワード・ノイズフィルタリング: レジュメの構造上の残滓、日付、学歴タイトル、非技術的なメタデータを厳密に除去します。

  2. スマートな要件カバレッジスコアリング(0〜100):

    • 求人要件カバレッジ率: 候補者のスキルが対象求人の技術スタックをどれだけ満たしているかを計算します(matched_job_skills / total_job_skills)。幅広い履歴書の候補者が不利益を被らないようにします。

    • 加重コンポーネントスコアリング:

      • 技術スタックの重複とカバレッジ: 最大40ポイント

      • CV全体のキーワード関連性: 最大25ポイント

      • 勤務形態と勤務地の一致: 最大20ポイント

      • 希望年収: 最大15ポイント

      • 除外ペナルティ: シニアリティ・技術面でのハードな不合格条件は -100ポイント

    • ティア(層級)別マッチ分類:

      • 最上位マッチ ($\ge 85$): 自動応募 / 優先応募の対象。

      • 強マッチ ($70 - 84$): 高く関心を持つ求人として、レビューやブックマーク用にフラグ化。

      • 不合格マッチ ($< 50$): 自動的に非表示または削除。

  3. プラグイン可能なマルチソースアーキテクチャ:

    • HireMeTech: 自動DOMフォールバックを備えたREST API直接連携(/api/jobs/search、/api/auth/me、/api/resume/profile)。

    • Comeet(Direct ATS): Comeet Career API(/careers-api/2.0/company/{id}/positions)との直接連携、asyncio.Semaphore(5) によるレート制限、技術カテゴリーのインデックス化、企業ごとのTTLキャッシュ。

    • AllJobs Israel: 現実的なブラウザヘッダーを使用したカテゴリフィード連携と、ソースレベルでのエラー分離。

  4. クロスソース重複除外とエンティティ統合:

    • 求人が複数のジョブボードに表示されている場合、重複を排除します。

    • ソースリスト(sources: ["hiremetech", "comeet"])を統合し、技術スタックを結合、最も詳細な説明を保持し、直接ATS応募リンクを優先します。

  5. 自律モードと監視モード:

    • 監視モード: 各ツールに対して標準のMCP確認を要求。

    • 自律モード: 手動プロンプトなしで安全な読み取り・フィルター・ブックマークの連鎖を実行。応募送信には2段階の安全バリアを適用します。

  6. 可観測性とレジリエンス:

    • ʼclogをID化するJSON(structlog)、トークン・認証情報をサニタイしてstderrに出力。

    • ToolResponse すべてのペイロードに自動的にトレースシグを付与。


ツールリファレンス(9のツール)

Tool Name

Parameters

Description

list_job_sources

none

登録された求人ソース(hiremetech、comeet、alljobs)、機能、、リアルタイムのヘルス状態を一覧表示します。

get_job_matches

sources: list[str] = None, force_refresh: bool = False

重複漢,し、全または指定されたプラットフォームからマッチした求人を取得します。

filter_jobs_by_preferences

ターー・スタック: list[str], working_mode: str, location: str, min_salary: int, keywords: list[str], excludeああるwords: list[str], cv_path: str

候補者の履歴書と好みに基づいて、集約された求人をフィルタリング・スコアリングします。

bookjob

job_id: str

元のプラットットフォーム上で求人を保存(favorite)します。

delete_job

job_id: str

求人を一致ら(非表示に)し,調缓存から削除します。

auto_apply_job

job_id: str

ステ会1: 応募モールを検し、プレビューを準備し、警告を報告します。

confirm_auto_apply

job_id: str

ステップ2: 応募送信を実行します。常に明示確認が必要です。

calibrate_selectors

none

ライブページにDOMセレク夕ーを自己修復ヒューリスティックで発見・校正します。

set_operation_mode

mode: 'superived' | 'autonomous'

サバ実行モードを監視モードと自動モード岡で切替ます。


クイックスタート&設定し

1. クるんと依存のインストール

git clone https://github.com/zvieli/hireme_mcp.git
cd hireme_mcp

# Using uv (recommended)
uv venv .venv
uv pip install -e ".[dev]"
playwright install chromium

2。候補プロフィールとCVを設定する

运简历 (cv.pdf, cv.docx, или cv.txt) をルートディレクトリに置きます:

cp /path/to/your/resume.pdf ./cv.pdf
cp .env.example .env

.envを編集して、デフォルトのCVパスと連絡先を設定します:

DEFAULT_CV_PATH=./cv.pdf
CANDIDATE_EMAIL=your.email@example.com
CANDIDATE_NAME="Your Name"

3。(任意)HireMeTechの初回認証設定

ComeetとAllJobsはログインなしで自動的に動作します。 HireMeTech アカウントを認証して、直接APIアクセスと自動応募を行うには:

.venv/bin/python -m job_mcp.setup
  1. Chromium ブラウザ何が開きます。

  2. 認証情報でログインします。

  3. 端末に戻り、[Enter] を押してセッションを./browser_profileに保存します。

注: 概要。


サーバー実行

オプションA: Dockerを使用する(推奨)

# Build and run in background
docker compose up -d

# View live multi-source aggregation logs
docker compose logs -f hireme-mcp

オプションB: ローカル実行

# Streamable HTTP (Default for Web & Cloud Clients)
.venv/bin/python -m job_mcp --transport http --host 0.0.0.0 --port 8000

# Stdio (Default for Desktop Clients)
.venv/bin/python -m job_mcp --transport stdio

視覚的なCLIパイプラインランナー

完全な自動検出・スコアリング・応募ドライランを、リッチな視覚出力と共にターミナルで直接実行するには:

# Run with auto-extracted skills from your CV:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf

# Run with explicit stack override and remote filter:
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --stack "Python,FastAPI,LangGraph" --work-mode remote --location "Tel Aviv"

# Execute live application submissions (disabled by default in dry-run):
.venv/bin/python scripts/run_mock_llm_pipeline.py --cv ./cv.pdf --auto-apply

MCPクライアント設定

1. Claude Desktop(claude_desktop_config.json)

Linuxの場合: ~/.config/Claude/claude_desktop_config.json
macOSの場合: ~/Library/Application Support/Claude/claude_desktop_config.json
Windowsの場合: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "job-search-mcp": {
      "command": "/absolute/path/to/hireme_mcp/.venv/bin/python",
      "args": ["-m", "job_mcp", "--transport", "stdio"],
      "env": {
        "BROWSER_HEADLESS": "true",
        "DEFAULT_CV_PATH": "/absolute/path/to/hireme_mcp/cv.pdf",
        "CANDIDATE_EMAIL": "candidate@example.com",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

2. Gemini Spark / Web MCP クライアント

  • エンドポイント URL: https://<your-host-or-devtunnel-id>/mcp

  • トランスポート: Streamable HTTP

  • 認証: なし / 認証不要


環境変数

Variable

Default

Description

DEFAULT_CV_PATH

./cv.pdf

動的な候補スキル抽出に使用するデフォルトのCVファイルパス。

CANDIDATE_EMAIL

candidate@example.com

自動応募フォームに使用する候補者のメールアドレス。

CANDIDATE_NAME

""

応募フォームの記入用の候補者氏名。

MCP_TRANSPORT

http

転送プロトコル(http, sse, stdio)。

MCP_HOST

0.0.0.0

HTTP/SSE転送のためのホストバインド。

MCP_PORT

8000

HTTP/SSE 転送用のポート。

BROWSER_HEADLESS

true

ブラウザをヘッドレスモードで実行する(true/false)。

BROWSER_PROFILE_DIR

./browser_profile

永続的な Chromium セッションストレージのディレクトリ。

CACHE_TTL_MINUTES

60

重複除去済みジョブキャッシュのインメモリ TTL(分)。

LOG_LEVEL

INFO

構造化ログ(DEBUG, INFO, WARNING, ERROR)。


テストの実行

完全な自動テストスイート(542件)を実行します:

.venv/bin/pytest tests/ -v

ライセンス

このプロジェクトはMITライセンスの下で提供されています。

Available Tools

20 tools
auto_apply_jobA

Step 1: Inspect job application form and generate preview without submitting.

Uses HybridApplicationDispatcher to map form fields, evaluate safety guardrails, and stage the application for subsequent confirmation via confirm_auto_apply.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUnique ID of the job listing.
cv_pathNoOptional path to resume/CV document (defaults to DEFAULT_CV_PATH or user profile).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does disclose the critical safety property — 'without submitting' and 'evaluate safety guardrails' — which counters the write-like name, and it says the application is 'staged' rather than committed. However it never says what happens when a guardrail fails, whether the staged preview expires, or what authorization is required.

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?

The non-submission guarantee is front-loaded in the first clause, which is exactly what an agent needs before anything else. The second sentence is slightly padded by the internal dispatcher name but remains short and scannable.

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?

An output schema exists, so return values need not be explained. For a two-parameter preview tool with no annotations, the description covers intent, safety posture, and the required follow-up call; only failure-mode and auth behavior are unstated.

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 description coverage is 100%, so both `job_id` and the optional `cv_path` fallback are already documented in the schema. The description adds nothing about parameter meaning or precedence, so the baseline 3 applies.

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?

States a specific verb+resource: 'Inspect job application form and generate preview without submitting', which is far more precise than the tool name suggests. It also distinguishes itself from the confirmation sibling by framing itself as 'Step 1'. The 'Uses HybridApplicationDispatcher' sentence is an internal implementation detail that adds little for an agent.

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 positions the tool as the first step and names `confirm_auto_apply` as the follow-up path, which gives the agent a clear routing decision. It stops short of stating preconditions (e.g., must the job be bookmarked or match-verified first) or any when-not-to-use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bookmark_jobC

Save or bookmark a job listing by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUnique ID of the job listing.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a mutation but says nothing about idempotency (what happens if the job is already bookmarked), required auth/permissions, or whether the bookmark is reversible — significant omissions for a write operation with zero annotation coverage.

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?

A single short sentence with the action and key front-loaded and no wasted words. It is efficient, though its brevity is partly the cause of the missing behavioral context rather than pure economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 tool has only one simple parameter. Still, for an unannotated mutation whose behavior on duplicate bookmarks and permission requirements is unknown, the description is only minimally sufficient.

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?

There is a single parameter with 100% schema description coverage, so the schema already explains job_id fully. The phrase 'by its ID' merely restates the parameter rather than adding format, source, or validity information, so the baseline 3 applies.

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?

States a specific verb (save/bookmark) and resource (job listing) plus the lookup key, so the action is unambiguous. However, it does not distinguish itself from close siblings like mark_job_as_applied or delete_job, which operate on the same job entities, so it falls 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no context about why an agent would bookmark versus apply to or delete a job, and no exclusions. With siblings like mark_job_as_applied and auto_apply_job in the same family, the absence of routing guidance is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calibrate_selectorsA

Test, discover, and calibrate DOM selectors against the live page.

Tests all registered selectors against the live DOM, heuristically discovers alternative selectors if layout changes have occurred, and persists verified selectors into the dynamic selector registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_recalibrateNoIf True, clears existing dynamic registry cache before calibration.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool persists selectors into a dynamic registry and discovers alternatives heuristically, but it omits permissions, reversibility, side effects on the live page, and rate limits.

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?

The description is front-loaded with a clear one-sentence summary and then adds a concise elaboration. It is efficient, though the second sentence slightly restates the verbs from the first without introducing much new information.

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?

An output schema exists, so return values need not be explained, and the single parameter is fully covered by the schema. The description sufficiently explains the calibration workflow, though it could be strengthened with usage conditions or prerequisites.

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 description coverage is 100%, and the single parameter 'force_recalibrate' is fully documented in the schema. The description adds no further parameter meaning, so the baseline of 3 applies.

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 specific verbs ('test, discover, calibrate') and a clear resource ('DOM selectors against the live page'), making the tool's function immediately distinguishable from the job-search/application siblings. It also states the core outcome ('persists verified selectors into the dynamic selector registry').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when the tool is relevant ('if layout changes have occurred') but does not explicitly state when to use it versus alternatives, nor does it provide exclusions or prerequisites. Usage is inferable from the described behavior rather than directly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_auto_applyA

Step 2: Confirm and execute job application submission.

Executes application submission through HybridApplicationDispatcher and records an immutable audit record in the ApplicationLedger.

Requires auto_apply_job to have been called first for this job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoIf True, bypasses non-duplicate guardrails (e.g. AUTO_APPLY_ENABLED, score, cap).
job_idYesUnique ID of the job listing previously previewed.
cv_pathNoOptional path to CV document overriding the previewed CV.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It usefully discloses that submission runs through HybridApplicationDispatcher and writes an immutable audit record in the ApplicationLedger, plus the ordering prerequisite. It does not state that submission is effectively irreversible, nor permission/auth or rate-limit considerations, which matter for a final write operation.

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?

Three compact sentences with the action and prerequisite front-loaded; every sentence adds signal. The middle sentence about the dispatcher/ledger slightly elongates without changing the decision, keeping it just below a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 prerequisite is covered. However, for an irreversible write tool with no annotations, the description omits irreversibility, failure/duplicate behavior, and permission needs, leaving a meaningful gap.

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 description coverage is 100%, so the meanings of force (bypass guardrails) and cv_path (override previewed CV) are already fully documented in the schema. The description adds only an implicit reference to job_id via the prerequisite, so the baseline 3 applies.

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?

Specific verb+resource: it confirms and executes job application submission, and names the internal machinery (HybridApplicationDispatcher, ApplicationLedger). The 'Step 2' framing distinguishes it from the sibling auto_apply_job as the follow-up step in a pipeline. It stops short of a crisp one-line statement of what it does, but an agent can identify the operation.

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?

It states an explicit prerequisite: auto_apply_job must have been called first for this job_id, which is exactly the routing condition the agent needs. It does not say when NOT to use it or mention the alternative (mark_job_as_applied) for already-applied jobs, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_jobC

Dismiss or hide a job listing from view.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUnique ID of the job listing.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It says 'dismiss or hide from view,' implying a reversible view-level action, yet the name 'delete_job' implies permanent removal; the description never states which is true, whether data is destroyed, or whether the action can be undone. That destructive-vs-reversible ambiguity is the single most important behavior for the agent and it is left unresolved.

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?

A single short sentence, front-loaded with the verb and resource, and free of padding. Its brevity is appropriate even though it leaves important behavior underspecified.

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?

An output schema exists, so return values need no explanation, but the description omits the crucial destructive-vs-reversible distinction and conflicts with the tool name. For a delete-named mutation with no annotations, this leaves an agent unable to safely decide whether to call it.

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?

There is only one parameter (job_id) with 100% schema description coverage, so the schema already documents it fully. The description adds nothing beyond what the schema provides, which is the expected baseline when coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb and resource ('Dismiss or hide a job listing'), but it conflicts with the tool name 'delete_job' and does not disambiguate whether the action is reversible. Sibling tools like bookmark_job and mark_job_as_applied are not distinguished, so an agent cannot confidently tell what this does relative to the family.

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?

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as bookmark_job for the same hiding/saving intent. The agent is left to infer when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_companiesA

Identify supported ATS portals from company names or career URLs using bounded deterministic discovery.

Returns evidence and optional validated registry configuration. Does not persist configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetsNoBounded list of discovery targets (each with 'company_name' and/or 'career_url'), max 10.
career_urlNoSingle career board / jobs page URL to inspect.
company_nameNoSingle company name to discover (e.g. 'Stripe', 'Vercel').

Output Schema

ParametersJSON 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?

With no annotations, the description carries the full burden. It usefully discloses that discovery is bounded and deterministic and that configuration is not persisted, which is real behavioral value. However, it omits auth requirements, rate-limit/network behavior, and what 'evidence' actually contains for a discovery operation.

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?

Three short, front-loaded sentences with no filler. The core action leads, followed by return and non-persistence notes. Tight and skimmable, though the two trailing sentences could be folded together.

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?

An output schema exists, so return-value explanation is unnecessary (and the description's return note is a harmless bonus). For a 3-param, zero-required, fully-documented tool, the description covers action, scope, and non-persistence adequately. The main gap is absent guidance on when to choose this over sibling discovery/job tools.

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 the schema already documents all three parameters (targets, career_url, company_name) with their constraints. The description only restates that inputs are company names or career URLs and adds no syntax, precedence, or interaction detail beyond the schema. Baseline 3 applies.

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?

States a specific verb+resource: 'Identify supported ATS portals from company names or career URLs.' This is clearly distinguishable in substance from siblings like job_search or auto_apply_job, but the description never names or contrasts any sibling explicitly. Clear purpose, no sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'bounded deterministic discovery' and the ability to accept company names or URLs implies the discovery use case, but there is no explicit when-to-use guidance, no prerequisites, and no named alternative among the many sibling tools. Usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

filter_jobs_by_preferencesB

Filter and rank cached job listings based on tech stack, location, salary, or CV.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional maximum number of jobs to return.
cv_pathNoPath to resume/CV file (PDF, DOCX, TXT) for automatic skill extraction and matching.
keywordsNoAdditional keywords to require or match in job descriptions.
locationNoTarget location (e.g. 'New York', 'London', 'Remote').
work_modeNoPreferred work mode: 'remote', 'hybrid', or 'onsite'.
min_salaryNoMinimum desired annual salary in USD.
tech_stackNoPreferred technologies (e.g. ['Python', 'FastAPI', 'React']).
exclude_keywordsNoKeywords to exclude (e.g. ['Junior', 'PHP', 'Contract']).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It says 'filter and rank' but doesn't disclose ranking behavior, whether it mutates cached state, what ranking criteria are prioritized, or how cv_path processing works. For an 8-param tool with no annotations, this is thin.

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?

A single efficient sentence that front-loads the verb and resource, then the criteria. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values need not be explained. However, for an 8-param tool with no annotations, the description omits ranking behavior, cv_path processing mechanics, and the tool's relation to the broader job-search workflow — gaps that leave the agent guessing about invocation context.

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 description coverage is 100% and each parameter has a clear description, so the schema does the heavy lifting. The description lists the filter dimensions (tech stack, location, salary, CV) which mirrors the schema without adding syntax or format detail beyond it. Baseline 3 is appropriate.

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?

States a specific verb (Filter and rank) and resource (cached job listings) with the criteria it operates on. It distinguishes itself from siblings like search_linkedin_jobs or get_job_matches by specifying it works on already-cached listings, though the 'cached' aspect could be made more prominent.

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 vs. alternatives like get_job_matches or search_linkedin_jobs, nor any preconditions (e.g., must listings be cached first?). The agent is left to infer the tool's place in the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_application_historyB

Retrieve historical job application submissions and outcomes from the persistent audit ledger.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return (default 50).
statusNoOptional status filter ('success', 'failed', 'blocked', 'pending').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds useful context by naming a 'persistent audit ledger' (durable, historical source) and 'Retrieve' implies a read, but it does not state ordering, pagination semantics beyond limit, or whether results are scoped to a user. Partial disclosure only.

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?

A single front-loaded sentence with the verb, resource, and data source, and zero filler. Nothing could be trimmed without losing meaning.

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 two-parameter read tool with a full schema and an output schema, the description covers what the tool returns and where the data comes from. The main gap is the absence of when-to-use routing against siblings, which keeps it from a 5.

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 description coverage is 100%, so the schema already documents both 'limit' (default 50) and the optional 'status' filter with its allowed values. The description adds nothing about parameter syntax or behavior, so the baseline 3 applies.

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?

States a specific verb (retrieve) and a precise resource (historical job application submissions and outcomes), which is inherently distinct from the apply/search siblings. It stops short of explicitly differentiating itself from tools like mark_job_as_applied or search_linkedin_jobs, so it earns a 4 rather than a 5.

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?

There is no guidance on when to reach for this tool versus the many siblings that also touch applications, nor any stated prerequisites or exclusions. The purpose implies a reporting/audit use case, but the agent must infer it entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_matchesA

Fetch matched job listings from registered sources (HireMeTech, Comeet, AllJobs, LinkedIn, Workday, Eightfold, DirectTech).

Uses cached job listings unless cache is stale or force_refresh is True. Optionally filters by specific source IDs (e.g. ['hiremetech', 'comeet', 'alljobs']). When cv_path is provided, extracts candidate profile and dynamically populates queries, seniority exclusions, and scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return (default: 50).
cv_pathNoPath to resume/CV file (or raw CV text) for automatic skill extraction and matching.
sourcesNoOptional list of source IDs to query (e.g. ['hiremetech', 'linkedin', 'workday']). If None, queries all active registered sources.
categoryNoOptional category filter (e.g. 'public', 'enterprise', 'authenticated').
keywordsNoAdditional keywords to require or match.
locationNoTarget location (e.g. 'Tel Aviv', 'Remote').
work_modeNoPreferred work mode: 'remote', 'hybrid', or 'onsite'.
categoriesNoOptional list of category filters.
min_salaryNoMinimum desired annual salary.
tech_stackNoPreferred technologies (e.g. ['Python', 'FastAPI']).
force_refreshNoForce a live scrape/fetch from sources even if cache is fresh.
exclude_keywordsNoKeywords to exclude (e.g. ['Junior', 'PHP']).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful behavior: results come from cache unless stale or force_refresh=True, and cv_path triggers profile extraction that dynamically populates queries, seniority exclusions, and scores. It omits auth requirements, rate limits, and failure behavior, but the cache and dynamic-population semantics are real value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place, with the core fetch purpose front-loaded before the cache and cv_path caveats. No filler or 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?

For a 12-parameter, zero-required tool with an output schema, the description covers the non-obvious behaviors (caching, force_refresh, cv_path-driven matching). It leaves out how matching/scoring is computed and any auth or rate-limit context, which keeps it short of fully complete.

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 the baseline is 3, but the description adds semantics the schema does not: that sources defaults to all active registered sources and that cv_path causes automatic profile extraction that reshapes queries and scoring. These are behavioral couplings between parameters and results, not mere restatements.

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?

States a specific verb ('Fetch') and resource ('matched job listings') and enumerates the registered sources, which clearly separates it from generic siblings like job_search or job_fetch. However, it never explicitly contrasts itself with those siblings, so the differentiation is implicit 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage through the cache/force_refresh and cv_path mechanics, but gives no explicit when-to-use guidance or exclusions against alternatives such as job_search, search_linkedin_jobs, or filter_jobs_by_preferences. The agent must infer when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_linkedin_job_detailsA

Retrieve full job details for a specific LinkedIn job posting.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesLinkedIn job ID (e.g. 'linkedin_4152839402' or '4152839402').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states it retrieves details but does not disclose whether this is a read-only operation, authentication requirements, rate limits, or error behavior. The presence of an output schema reduces the need to describe return values, but key behavioral traits remain undisclosed.

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?

A single, front-loaded sentence that is appropriately sized and contains no unnecessary information.

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 tool is simple with one parameter, and an output schema exists. The description is complete enough for an agent to understand what it does and how to call it, though it could mention that the job_id must be valid or that authentication is required.

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 description coverage is 100%, and the schema already documents the job_id parameter with examples. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 is appropriate.

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 a specific verb 'Retrieve' and resource 'full job details for a specific LinkedIn job posting', distinguishing it from search-oriented siblings like search_linkedin_jobs. It is clear but does not explicitly mention which sibling to use when only a summary is needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use when you have a specific job ID and need full details. However, there is no explicit guidance on when to use this versus search_linkedin_jobs or other retrieval tools, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

job_fetchA

Fetch one canonical job using an opaque ref returned by job_search.

Returns factual retrieval status only.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesOpaque, versioned JobRef string (e.g. 'v1_...').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that only factual retrieval status is returned, which is useful, and that 'ref' is opaque and versioned. However, it does not mention permissions, error behavior, or whether the result includes full job data or just status, leaving gaps for a retrieval tool.

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 short sentences, front-loaded with the core action and followed by the return caveat. No wasted words.

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 one required parameter, an output schema exists (so return values need not be described), and the description covers purpose, source of input, and return nature. It is nearly complete, missing only minor behavioral details like error handling or authentication, which are not critical here.

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% and the schema describes 'ref' as an opaque, versioned JobRef string with an example. The description adds no parameter meaning beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb (Fetch) and resource (one canonical job) with scope (single, by ref). It explicitly differentiates from job_search by naming the sibling and clarifying that this retrieves one job using a ref that job_search returns.

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?

Clear context: use after job_search to retrieve a specific job. It identifies the prerequisite (ref from job_search) but does not state exclusions or alternatives for fetching job details (e.g., get_linkedin_job_details), leaving some ambiguity about when to use another tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_configured_sourcesB

Return configured source metadata only, not observed provider health.

This path does not use the aggregator, provider health, browser or model. A full MCP transport startup still runs the existing lifespan separately.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does usefully signal that this path does not touch the aggregator, provider health, browser, or model, implying a lightweight read with no provider side effects, but it never explicitly states read-only semantics, auth needs, or whether the lifespan run has side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core scope ('configured source metadata only, not observed provider health') front-loaded. The final sentence about MCP transport lifespan is somewhat internal and only marginally helpful, but overall it is tight and readable.

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 zero-parameter listing tool with an output schema that already documents return values, the description supplies adequate purpose and scope. The main omission is any routing between this and the sibling source/job listing tools.

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 tool takes zero parameters, so there is nothing for the description to document. Baseline 4 applies; no parameter-level ambiguity exists.

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?

States a specific verb and resource: returning configured source metadata. It also scopes the result by excluding observed provider health, which is genuinely clarifying. However, it never names list_job_sources or any sibling, so an agent cannot tell how this differs from the other source-listing tool.

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?

There is no statement of when to use this tool versus alternatives such as list_job_sources. The notes about the aggregator, health, browser, and lifespan read as implementation detail rather than selection guidance, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_job_sourcesC

List all registered job sources, their capabilities, and current health status.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoOptional category filter ('public', 'enterprise', 'authenticated').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the response includes capabilities and health status, but says nothing about whether this is a safe read, whether it requires authentication, how health is determined, or whether results are paginated.

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?

A single front-loaded sentence that names the resource first and the returned content second. No padding or redundancy, though it is arguably too terse given the missing usage and behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 explain return values, and the single optional parameter is fully covered by the schema. What is missing is the usage context that would let an agent choose this tool over list_configured_sources or job_search.

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 description coverage is 100% and the single optional 'category' parameter is fully documented with its allowed values in the schema, so the baseline is 3. The description adds nothing about filtering behavior beyond what the schema already states.

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?

States a specific verb (list) and resource (job sources) plus the scope of what is returned: capabilities and health status. However, it does not distinguish itself from the similarly named sibling list_configured_sources, leaving the agent to guess which listing tool applies.

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 gives no when-to-use guidance, no prerequisites, and never names an alternative. With list_configured_sources in the sibling set, the absence of any routing hint is a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mark_job_as_appliedA

Manually record a job as applied in the persistent ledger and dismiss it from cache.

This ensures the job will never reappear in future job scout runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional notes (e.g. 'Applied manually on company portal').
job_idYesJob identifier (e.g., from job listings or 'manual_<id>').
companyNoCompany name.
job_titleNoPosition / Job title.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the important consequences: a durable ledger entry, cache dismissal, and permanent exclusion from future job scout runs. That is genuine side-effect disclosure beyond the schema. It omits idempotency behavior (what happens if called twice) and any permission requirements, which keeps 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the core action is front-loaded with the durability consequence immediately after. Nothing is redundant with the schema.

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?

An output schema exists, so return values need not be explained, and the input schema fully documents parameters. The description supplies purpose and the key persistence/exclusion semantics, leaving only minor gaps (idempotency, auth expectations) for a mutation tool with no annotations.

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 description coverage is 100%, so all four parameters (including the notes example and job_id format) are already documented in the schema. The description adds no parameter-level meaning such as what job_id formats are accepted or how company/job_title are used in the record, so the baseline 3 applies.

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?

States a specific verb+resource (record a job as applied) plus the mechanism (persistent ledger) and side effect (dismiss from cache). The word 'manually' cleanly distinguishes it from the sibling auto_apply_job, so an agent can choose between them from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'manually' framing implies this is the fallback when an application happened outside the agent (e.g., company portal), which is useful routing context. However, it never explicitly states when to use this instead of auto_apply_job or confirm_auto_apply, and offers no exclusions or preconditions, leaving the alternative choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notify_new_jobsB

Scan aggregated jobs, filter unseen postings via JobTracker, and dispatch alerts.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoOptional maximum number of unseen jobs to notify in one batch.
channelNoNotification channel (default: 'telegram').telegram
sourcesNoOptional list of source IDs to fetch from (e.g. ['linkedin', 'comeet', 'workday']).
keywordsNoAdditional keywords to require or match.
locationNoGeographic location filter.
min_scoreNoMinimum match score (0-100) threshold for alerting.
work_modeNoPreferred work mode: 'remote', 'hybrid', or 'onsite'.
tech_stackNoPreferred tech stack list for ranking/filtering.
force_refreshNoForce live fetch from sources bypassing cache.
auto_mark_seenNoAutomatically record notified jobs in tracker to avoid duplicate alerts.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the stateful dedup behavior (filter unseen via JobTracker, dispatch alerts), but for a tool with external side effects it omits that alerts are actually sent to a channel, that auto_mark_seen mutates tracker state by default, and any permission or rate-limit considerations.

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?

A single twelve-word sentence ordered along the execution pipeline (scan, filter, dispatch) with no filler. It is efficiently front-loaded, though its extreme brevity leaves substantive gaps for a ten-parameter, side-effecting tool.

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?

An output schema exists so return values need not be explained, but with ten parameters, zero annotations, and real side effects (outbound alerts plus tracker mutation), a one-line description leaves the agent without guidance on invocation context or consequences. It should do more given the tool's complexity.

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 description coverage is 100%, so all ten parameters are already self-documenting, including defaults for channel, force_refresh, and auto_mark_seen. The description adds no syntax or semantics beyond what the schema provides, which is the baseline 3 case.

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 uses specific verbs and a clear three-step pipeline (scan aggregated jobs, filter unseen via JobTracker, dispatch alerts), so the agent knows this is the end-to-end notification flow rather than a search primitive. It does not, however, distinguish itself from closely related siblings like run_job_scout, test_notifier, or get_job_matches.

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?

There is no statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. The presence of siblings such as test_notifier (clearly a dry-run variant) makes the missing distinction especially costly, since nothing tells the agent to prefer one over the other.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_job_scoutA

Execute autonomous end-to-end multi-source job scouting pipeline.

Discovers available sources, aggregates job listings, evaluates CV match scores against the candidate profile, automatically bookmarks high-affinity positions, stages/submits applications via HybridApplicationDispatcher if enabled, and returns structured tracking metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of jobs to return/process (default: 50).
cv_pathNoOptional path to candidate CV (PDF, DOCX, TXT) or raw CV string.
sourcesNoOptional list of specific source IDs to query. If omitted or None, queries all registered sources.
keywordsNoAdditional keywords to match.
locationNoGeographic location filter (e.g. 'Israel', 'Tel Aviv', 'Remote').
work_modeNoPreferred work mode: 'remote', 'hybrid', or 'onsite'.
auto_applyNoIf True, executes safe application preview and submission for top-tier jobs.
min_salaryNoMinimum desired annual salary in USD.
tech_stackNoTarget technology stack keywords (defaults dynamically to CV skills).
action_modeNoAction mode ('autonomous' or 'supervised'). In autonomous mode, auto_apply is enabled.
detail_levelNoResponse detail level ('summary' or 'full').
target_rolesNoTarget job titles or roles to prioritize.
auto_bookmarkNoIf True, automatically bookmarks top-tier and strong-match jobs (default: True).
force_refreshNoForce fresh fetch from live sources bypassing cache.
notify_channelNoOptional notification channel to dispatch alerts to (e.g. 'telegram').
exclude_keywordsNoKeywords to filter out (e.g. seniority exclusions).
max_applicationsNoMaximum number of applications to submit per run (default: 3).
top_tier_thresholdNoScore threshold for Top-Tier priority jobs (default: 85).
disqualify_thresholdNoScore threshold below which jobs are dismissed/removed (default: 50).
strong_match_thresholdNoScore threshold for Strong Match jobs (default: 70).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the significant side effects: automatic bookmarking and staged/submitted applications via HybridApplicationDispatcher, gated on auto_apply. It omits permission requirements, rate limits, runtime/latency, and any reversibility caveats for submitted applications, which matters for a mutating pipeline.

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?

Front-loaded with a single-sentence purpose, followed by one dense sentence enumerating the pipeline stages. Efficient, though the second sentence is a long run-on that could be split for scanability.

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?

An output schema exists, so return values ('structured tracking metrics') need not be expanded, and all 20 params are schema-documented. The remaining gap is the absence of usage routing and safety/permission context for a 20-param tool that can submit real applications.

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 description coverage is 100%, so all 20 parameters are already documented in the schema. The description adds only a marginal cross-reference between action_mode 'autonomous' and auto_apply; it provides no syntax or default semantics beyond what the schema states, so the baseline 3 applies.

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?

States a specific verb ('Execute') and resource ('multi-source job scouting pipeline') and then enumerates the actual stages (discover sources, aggregate listings, score CV match, bookmark, stage/submit applications). This distinguishes it from granular siblings like job_search, auto_apply_job, and get_job_matches, which each cover only one stage.

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 explains what the pipeline does but never says when to choose it over the many sibling tools (job_search, auto_apply_job, get_job_matches, filter_jobs_by_preferences). There is no explicit when/when-not guidance or named alternative, leaving selection to inference from the enumerated steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_linkedin_jobsB

Search LinkedIn jobs using the high-speed guest seeMoreJobPostings endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
f_ENoExperience level filter (e.g. '1'=internship, '2'=entry, '3'=associate, '4'=mid-senior).
f_ALNoFilter for Easy Apply jobs.
f_WTNoRaw LinkedIn workplace type parameter ('1'=onsite, '2'=remote, '3'=hybrid).
f_TPRNoTime posted range (e.g. 'r86400' for past 24h, 'r604800' for past week).
limitNoMaximum number of jobs to return (default: 25).
startNoPagination start offset index.
cv_pathNoOptional path to resume/CV file (or raw CV text) to dynamically derive search keywords if keywords is empty.
sort_byNoSorting parameter ('R'=relevant, 'DD'=date posted).
keywordsNoSearch query / keywords (e.g. 'Software Engineer', 'Python').
locationNoTarget geographic location (default: 'Israel').Israel
work_modeNoOptional work mode filter: 'onsite', 'remote', or 'hybrid'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. The phrase 'guest seeMoreJobPostings endpoint' weakly implies an unauthenticated, read-only lookup, but the description says nothing about rate limits, pagination behavior, default location scoping ('Israel'), or what happens when keywords are empty and cv_path drives the query.

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?

A single front-loaded sentence with no filler; the core action and endpoint are stated immediately. Nothing could be trimmed without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 11 parameters and an output schema present, the schema carries most of the load, but for a default-scoped search tool with no annotations and many competing siblings, the description should at minimum explain scope, defaults, and how it differs from the other job-listing tools.

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 description coverage is 100%, so the baseline is 3 and the schema already documents all 11 parameters, including enum-like codes for f_E, f_WT, f_TPR and sort_by. The description adds nothing beyond the schema and does not explain how overlapping filters (work_mode vs f_WT, keywords vs cv_path) interact.

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 names a specific verb and resource ('Search LinkedIn jobs') and even the underlying endpoint, so an agent knows exactly what the tool does. It does not, however, distinguish itself from look-alike siblings such as job_search, job_fetch, or get_job_matches, leaving the agent to 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.

Usage Guidelines2/5

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 search-adjacent siblings (job_search, job_fetch, filter_jobs_by_preferences, get_job_matches). No prerequisites, no when-not-to-use, no routing guidance at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_operation_modeA

Switch between supervised and autonomous operation modes.

In autonomous mode, the server signals the LLM client that it may chain read-only and safe-action tools without per-tool user confirmation. Only confirm_auto_apply (actual job submission) always requires explicit user confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesOperation mode — 'supervised' or 'autonomous'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and does well: it explains the concrete behavioral consequence of autonomous mode (tool chaining without per-tool confirmation) and the important exception that confirm_auto_apply still requires explicit user confirmation. This is meaningful state-changing context. It does not, however, state whether the mode persists across sessions, who may set it, or whether the change is reversible.

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?

Front-loaded statement of purpose followed by a concise consequence clause. Two short paragraphs, each earning its place. 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 one required enum-like parameter and an output schema that presumably returns the resulting mode, the description covers the essential behavior an agent needs. Missing only persistence/permission details and any rollback semantics. Sufficient for correct invocation.

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 description coverage is 100% and the schema documents the mode parameter with its two allowed values. The description adds conceptual meaning ('supervised' vs 'autonomous' with behavioral effects) but no format or syntax detail beyond the schema. Baseline 3 is appropriate.

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?

States a specific verb+resource (switch operation modes) and enumerates the two modes. Does not name any sibling tool to differentiate from, but no sibling performs the same function, so confusion risk is low. Clear but without explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when the switch matters by explaining what autonomous mode enables, but gives no explicit rule for when to call this tool vs simply proceeding. The conditional nature of the tool's effect is described, not its invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_notifierA

Verify notifier connectivity, health check, and dispatch a test alert message.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNoNotification channel to test (default: 'telegram').telegram

Output Schema

ParametersJSON 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?

No annotations are provided, so the description carries the full burden. It does disclose the key side effect (an actual alert message is dispatched) and a read-only-style health check, but says nothing about required channel configuration, permissions, or whether the test message reaches a real external destination.

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?

A single front-loaded sentence with no filler. Minor redundancy between 'verify connectivity' and 'health check', which describe nearly the same activity.

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 return values need no explanation, and the single optional parameter is fully schema-documented. For a simple one-parameter diagnostic tool the description is nearly sufficient, missing only explicit guidance on when to run it and whether the test alert is externally visible.

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?

Only one parameter with 100% schema description coverage, so the schema already documents 'channel' and its 'telegram' default. The description adds nothing about valid channels or how the default is chosen, so baseline 3 applies.

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?

States specific verbs and resource: 'Verify notifier connectivity, health check, and dispatch a test alert message.' An agent can tell this is a diagnostic/test tool rather than the production notifier, though it never names the sibling notify_new_jobs it should be contrasted with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the words 'test' and 'health check' – an agent can infer this is a pre-flight/diagnostic call, but the description gives no explicit when-to-use, when-not, or alternative (e.g. 'run this before enabling notifications').

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. 20 tool updatesv0.1.0
    • First observedauto_apply_job
    • First observedbookmark_job
    • First observedcalibrate_selectors
    • First observedconfirm_auto_apply
    • First observeddelete_job
    • First observeddiscover_companies
    • First observedfilter_jobs_by_preferences
    • First observedget_application_history
    • First observedget_job_matches
    • First observedget_linkedin_job_details
    • First observedjob_fetch
    • First observedjob_search
    • First observedlist_configured_sources
    • First observedlist_job_sources
    • First observedmark_job_as_applied
    • First observednotify_new_jobs
    • First observedrun_job_scout
    • First observedsearch_linkedin_jobs
    • First observedset_operation_mode
    • First observedtest_notifier

TDQS

B3.2/5.0

Scored across 20 tools

Disambiguation3/5

Several tools overlap in the job-discovery space: job_search, get_job_matches, filter_jobs_by_preferences, and run_job_scout all retrieve/aggregate jobs, while list_configured_sources vs list_job_sources and notify_new_jobs vs run_job_scout blur boundaries. Descriptions do help differentiate them (config vs health, one-shot search vs full pipeline), but an agent can still misselect among the search/aggregation tools.

Naming Consistency4/5

Nearly all tools use snake_case verb_noun phrasing (list_job_sources, mark_job_as_applied, get_application_history), which is predictable and readable. The only deviations are job_search and job_fetch, which lead with the noun instead of the verb, but this is minor.

Tool Count3/5

At 20 tools the surface is on the heavy side for a job-scouting server, and a few tools (job_search/job_fetch vs get_job_matches, notify_new_jobs vs run_job_scout) feel redundant. Each maps to some functionality, but the count is borderline rather than tight.

Completeness4/5

Coverage is strong: search, fetch, filter, bookmark, dismiss, two-step apply with audit history, notifications, full scout pipeline, source listing, and ATS discovery are all present. Minor gaps like no explicit preference/config update or source-management CRUD remain, but core lifecycles are covered.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An AI-powered job search and application assistant that enables multi-source job hunting, OpenAI matching, cover letter generation, and hybrid application automation via Playwright, Chrome CDP, screen OCR, and manual assist.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural-language job search and aggregation from multiple recruitment websites with zero configuration, providing filtered results and standardized output for AI assistants.
    64 npm
    ISC