Skip to main content
Glama
jobinja-employer-mcp

jobinja-employer-mcp

by saeedsepehr

jobinja-employer-mcp | مرور سریع و شورت‌لیست رزومه‌های دریافتی پنل کارفرمایی جابینجا با هوش مصنوعی

jobinja-employer-mcp ابزاری متن‌باز و رایگان برای کارفرمایان و کارشناسان جذب است که در جابینجا آگهی استخدام دارند. این ابزار پنل کارفرمایی جابینجا را به دستیارهای هوش مصنوعی مثل Claude، ChatGPT و Codex وصل می‌کند تا رزومه‌های دریافتی هر آگهی را سریع مرور کنید، متقاضیان مناسب را شورت‌لیست کنید و غربالگری اولیه رزومه را با مصرف توکن کم انجام دهید.

این ابزار برای کارجویان نیست و فقط با حساب کارفرما (panel.jobinja.ir) کار می‌کند.

کافی است به دستیار بگویید «رزومه‌های جدید آگهی کارشناس پشتیبانی را مرور کن، به مرتبط‌ترین‌ها ستاره بزن و برای هر کدام دلیلش را یادداشت کن». دستیار خلاصه فشرده متقاضیان را می‌خواند، فقط رزومه‌های امیدوارکننده را کامل بررسی می‌کند و نتیجه را مستقیم در پنل جابینجا ثبت می‌کند: ستاره، یادداشت محرمانه تیم، پوشه‌بندی رزومه‌ها و در صورت تأیید شما، رد درخواست با دلیل مشخص.

این پروژه بر پایه پروتکل استاندارد MCP (Model Context Protocol) ساخته شده و روی ویندوز، مک و لینوکس کار می‌کند.

چرا jobinja-employer-mcp؟

  • مرور سریع رزومه‌های دریافتی: غربالگری صدها رزومه یک آگهی به چند دقیقه کار دستیار هوش مصنوعی تبدیل می‌شود.

  • مصرف توکن کم: ابزار screen_applicants برای هر متقاضی فقط خلاصه‌ای کوتاه از سوابق و ابتدای متن رزومه برمی‌گرداند و get_resume_text متن رزومه را بدون ارسال فایل PDF می‌دهد. دستیار فقط برای نامزدهای جدی سراغ جزئیات کامل می‌رود.

  • شورت‌لیست در همان پنل: ستاره، یادداشت و پوشه‌ها همان جایی ثبت می‌شوند که تیم استخدام هر روز با آن کار می‌کند. نیازی به خروجی Excel یا جابه‌جایی داده نیست.

  • امنیت حساب کارفرما: رمز عبور هیچ‌وقت در اختیار ابزار قرار نمی‌گیرد. یک بار خودتان وارد پنل می‌شوید و نشست ورود فقط روی رایانه خودتان می‌ماند.

  • استخدام منصفانه: جنسیت، سن و وضعیت تأهل در خلاصه‌های غربالگری حذف شده‌اند و دلایل رد مبتنی بر جنسیت یا سن در ابزار وجود ندارد.

  • کنترل کامل: در حالت فقط‌خواندنی، دستیار هیچ تغییری در پنل نمی‌دهد.

English README

قابلیت‌ها

ابزار

کاربرد

jobinja_status

بررسی وضعیت ورود و شرکت متصل

open_login_window

باز کردن پنجره ورود به پنل کارفرمایی، بدون نیاز به ترمینال

list_posts

فهرست آگهی‌های استخدام با تعداد متقاضیان در هر مرحله

list_applicants

فهرست متقاضیان هر آگهی با فیلتر وضعیت، ستاره‌دار و دارای یادداشت

screen_applicants

خلاصه فشرده و کم‌مصرف یک صفحه (۲۵ نفر) از متقاضیان برای شورت‌لیست سریع

get_resume_text

متن استخراج‌شده رزومه PDF، بدون ارسال خود فایل

get_applicant

اطلاعات تماس، پروفایل جابینجا، یادداشت‌های تیم، وضعیت و دلیل رد

download_resume و download_resumes

دانلود فایل رزومه (PDF) برای خواندن و تحلیل

list_folders و list_folder_applicants

پوشه‌های رزومه و متقاضیان هر پوشه

create_folder و set_applicant_folders

ساخت پوشه و افزودن یا حذف متقاضی از پوشه

set_star

ستاره زدن یا برداشتن ستاره

add_note و delete_note

افزودن یادداشت محرمانه تیم یا حذف یادداشت اشتباه

list_rejection_reasons و reject_applicant

رد درخواست با دلیل (جابینجا به متقاضی اطلاع می‌دهد)؛ با dry_run فقط فرم پر می‌شود

restore_applicant

بازگرداندن متقاضی به «در انتظار تعیین وضعیت»

باز کردن متقاضیِ «بررسی‌نشده» آن را دیده‌شده علامت می‌زند، دقیقاً مانند باز کردن آن در خود پنل.

Related MCP server: hirly MCP server

نصب سریع در Claude Code (افزونه)

اگر Claude Code دارید، این دستور را داخل Claude Code بزنید. افزونه همراه با یک راهنمای غربالگری (skill) نصب می‌شود و به uv و Google Chrome نیاز دارد:

/plugin install jobinja-employer --marketplace saeedsepehr/jobinja-employer-mcp

نصب سریع در Claude Desktop (یک‌کلیکی)

فایل jobinja-employer-mcp-<نسخه>.mcpb را از صفحه انتشارها دانلود کنید و روی آن دوبار کلیک کنید (یا در Claude Desktop از Settings ← Extensions آن را نصب کنید). سپس به Claude بگویید «پنجره ورود جابینجا را باز کن» و یک بار وارد پنل کارفرمایی شوید. Google Chrome باید نصب باشد.

نصب

پیش‌نیازها: پایتون ۳.۱۰ یا جدیدتر و مرورگر Google Chrome. اگر Chrome ندارید، Edge هم کار می‌کند (JOBINJA_BROWSER=msedge) یا مرورگر داخلی Playwright (JOBINJA_BROWSER=chromium و سپس playwright install chromium).

۱. نصب pipx (فقط یک بار):

  • ویندوز: py -m pip install --user pipx و سپس py -m pipx ensurepath

  • مک: brew install pipx و سپس pipx ensurepath

  • لینوکس: sudo apt install pipx و سپس pipx ensurepath

پس از ensurepath پنجره ترمینال را ببندید و دوباره باز کنید.

۲. نصب jobinja-employer-mcp (یا اجرای مستقیم با uvx jobinja-employer-mcp اگر uv دارید):

pipx install jobinja-employer-mcp

۳. ورود یک‌باره به پنل (یا از دستیار بخواهید ابزار open_login_window را اجرا کند): یک پنجره مرورگر باز می‌شود. وارد پنل کارفرمایی شوید؛ پنجره پس از بارگذاری پنل خودش بسته می‌شود.

jobinja-employer-mcp login

اگر نشست ورود منقضی شد، همین دستور را دوباره اجرا کنید. پیش از آن برنامه‌ای را که از این ابزار استفاده می‌کند ببندید.

اتصال به Claude، ChatGPT و Codex

Claude Code:

claude mcp add -s user jobinja -- jobinja-employer-mcp

Claude Desktop: این تنظیم را به فایل claude_desktop_config.json اضافه کنید و برنامه را دوباره باز کنید. مسیر فایل در مک ~/Library/Application Support/Claude/ و در ویندوز %APPDATA%\Claude\ است. اگر برنامه دستور را پیدا نکرد، مسیر کامل آن را بنویسید (where jobinja-employer-mcp در ویندوز، which jobinja-employer-mcp در مک و لینوکس).

{ "mcpServers": { "jobinja": { "command": "jobinja-employer-mcp" } } }

OpenAI Codex CLI: به فایل ~/.codex/config.toml اضافه کنید:

[mcp_servers.jobinja]
command = "jobinja-employer-mcp"

ChatGPT (کانکتور حالت توسعه‌دهنده): ChatGPT فقط به سرورهای راه دور با HTTPS وصل می‌شود.

jobinja-employer-mcp http --port 8765
cloudflared tunnel --url http://localhost:8765

دستور اول نشانی‌ای با یک بخش مخفی می‌دهد (/<secret>/mcp) و دستور دوم یک نشانی عمومی https://….trycloudflare.com. در ChatGPT به Settings ← Apps & Connectors ← Advanced بروید، Developer mode را روشن کنید و کانکتوری با نشانی https://….trycloudflare.com/<secret>/mcp و بدون احراز هویت بسازید.

هشدار: هر کسی این نشانی را داشته باشد به نشست جابینجای شما دسترسی دارد. نشانی را در اختیار کسی قرار ندهید، پس از کار تونل را ببندید و در این حالت بهتر است JOBINJA_READ_ONLY=1 را تنظیم کنید. برای تغییر بخش مخفی، فایل ~/.jobinja-mcp/http_token را حذف کنید.

نمونه درخواست‌ها از دستیار

  • «آگهی‌های فعالم را با تعداد رزومه‌های بررسی‌نشده نشان بده.»

  • «با screen_applicants رزومه‌های آگهی برنامه‌نویس جاوا را مرور کن و پنج نفری را که بیشترین تطابق را با شرح آگهی دارند ستاره بزن و دلیلش را یادداشت کن.»

  • «برای متقاضیانی که سابقه بانکی دارند پوشه «سابقه بانکی» بساز و اضافه‌شان کن.»

  • «متقاضیانی را که هیچ تجربه فنی مرتبط ندارند فهرست کن، ولی ردشان نکن.»

تنظیمات

متغیر

پیش‌فرض

JOBINJA_HOME

~/.jobinja-mcp (پروفایل مرورگر و نشست ورود)

JOBINJA_COMPANY

به‌صورت خودکار از پنل

JOBINJA_DOWNLOAD_DIR

~/Downloads/jobinja-resumes

JOBINJA_READ_ONLY

خالی (ابزارهای تغییردهنده فعال‌اند)

JOBINJA_BROWSER

chrome (یا msedge یا chromium)

JOBINJA_HTTP_TOKEN

در اولین اجرای jobinja-employer-mcp http ساخته می‌شود

پرسش‌های رایج

آیا jobinja-employer-mcp رمز عبور جابینجای من را ذخیره می‌کند؟ خیر. ورود را خودتان در پنجره مرورگر انجام می‌دهید و ابزار فقط از نشست ذخیره‌شده در پروفایل جداگانه مرورگر روی رایانه شما استفاده می‌کند.

آیا اطلاعات متقاضیان جایی ارسال می‌شود؟ داده‌ها فقط به دستیار هوش مصنوعی‌ای که خودتان وصل کرده‌اید داده می‌شود. رزومه‌های دانلودشده روی رایانه شما ذخیره می‌شوند. سیاست حریم خصوصی سرویس هوش مصنوعی انتخابی و قوانین حفاظت از داده‌های شخصی را رعایت کنید.

آیا دستیار بدون اجازه من درخواست‌ها را رد می‌کند؟ فقط اگر از او بخواهید. رد درخواست به متقاضی اطلاع داده می‌شود، پس پیشنهاد می‌شود ابتدا از دستیار بخواهید پیشنهاد رد را به‌صورت یادداشت ثبت کند تا خودتان بررسی کنید. در حالت JOBINJA_READ_ONLY=1 هیچ تغییری ممکن نیست.

این ابزار رسمی جابینجاست؟ خیر، jobinja-employer-mcp پروژه‌ای مستقل و غیررسمی است.

حریم خصوصی

jobinja-employer-mcp کاملاً روی رایانه شما اجرا می‌شود و هیچ داده‌ای برای سازنده ارسال نمی‌کند: نه آمار استفاده، نه اطلاعات متقاضیان. نشست ورود در ~/.jobinja-mcp و رزومه‌های دانلودشده در پوشه‌ای که تعیین می‌کنید می‌مانند تا خودتان پاکشان کنید. اطلاعاتی که ابزار از پنل می‌خواند فقط به دستیار هوش مصنوعی‌ای داده می‌شود که خودتان وصل کرده‌اید. متن کامل: PRIVACY.md.

مشارکت

باگ‌ها و پیشنهادها را در Issues ثبت کنید. اگر ساختار پنل جابینجا تغییر کرد و ابزاری از کار افتاد، Pull Request بسیار کمک می‌کند. هرگز فایل رزومه، داده متقاضی یا پوشه ~/.jobinja-mcp را در Issue یا مخزن قرار ندهید.

سلب مسئولیت

این پروژه وابسته به جابینجا نیست. تغییر ساختار پنل ممکن است ابزارها را از کار بیندازد. استفاده از آن باید مطابق قوانین جابینجا و مقررات حفاظت از داده‌های شخصی باشد. مجوز انتشار: MIT.

Available Tools

19 tools
add_noteAdd team noteB

Add a confidential team note to an applicant (visible to company members only, not to the candidate).

NameRequiredDescriptionDefault
postYes
textYes
page_hintNo
applicant_idYes

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true. The description adds genuinely new and important context beyond that: the note is confidential and never visible to the candidate, which materially affects content the agent writes. It stops short of covering permission requirements or whether notes can later be edited.

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 key constraint in parentheses and no wasted words. The visibility caveat arrives before the agent starts composing note text, which is the right order.

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?

No output schema and no annotations cover the parameters, so the description is the only explanatory layer for a 4-parameter write tool. Without any explanation of what 'post' is or why 'page_hint' exists, an agent cannot reliably populate the arguments.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 4 parameters, so the description must compensate and largely fails. 'Applicant' and 'note' map loosely to applicant_id and text, but 'post' and 'page_hint' are never mentioned and remain completely opaque in both schema and description.

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 ('Add a confidential team note to an applicant'), which is unambiguous about the operation. It does not name a sibling or clarify its relationship to delete_note/list_applicants, so an agent must infer the workflow boundary from the name alone.

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 explicit when-to-use or when-not-to-use guidance, and no alternative is named despite delete_note being a sibling. The confidentiality clause implies an internal-notes workflow but does not state prerequisites or exclusions.

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

create_folderCreate resume folderA
Idempotent

Create a new resume folder and return its id. If a folder with this exact title exists, returns it instead.

NameRequiredDescriptionDefault
titleYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare non-readonly, idempotent, non-destructive, open-world behavior. The description adds useful detail beyond annotations by stating that it returns the id and that an exact-title duplicate yields the existing folder rather than an error.

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 with no waste. The primary action and return value are front-loaded, followed immediately by the important duplicate-handling rule.

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 one-parameter create tool with no output schema, the description covers the action, return value, and duplicate behavior. It could still say more about title requirements or authorization, but the essential calling information is present.

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?

The single parameter has 0% schema description coverage, so the description must carry meaning. It does clarify that the title is matched exactly for duplicate detection, but it does not explain title constraints, formatting, or validation rules.

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?

Specific verb and resource: 'Create a new resume folder' plus the return value ('return its id'). It also distinguishes behavior from siblings that list or assign folders by explaining duplicate-title handling.

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 create intent is clear, and the duplicate-title rule implies when reuse occurs. However, it does not explicitly say when to call this versus list_folders or set_applicant_folders, nor does it state any prerequisites.

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

delete_noteDelete team noteB
Destructive

Delete one team note whose text contains text_contains (e.g. to fix a mistaken note). Only notes you can delete in the panel.

NameRequiredDescriptionDefault
postYes
page_hintNo
applicant_idYes
text_containsYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds that deletion is scoped to a single note and limited to deletable ones, but omits critical behavior for a substring-matched deletion: what happens if several notes contain the text, if none do, or whether the match is case-sensitive. No contradiction with 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?

Two short sentences, front-loaded with the operation and target, with the matching predicate and scope limit following immediately. Nothing is wasted.

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?

This is a destructive, non-idempotent mutation with no output schema, and the description does not say what is returned, how ambiguity (multiple or zero matches) is handled, or what `page_hint` does. For a delete tool, those omissions are significant.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden, yet it only explains `text_contains` (substring match). `post`, `applicant_id`, and especially `page_hint` — which likely determines which page of notes is searched and thus whether the call succeeds — are left entirely undefined in both schema and description.

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 ('Delete one team note') and narrows the target via a matching predicate (`text_contains`), which clearly separates it from the additive sibling add_note. It does not explicitly name the sibling, but the destructive verb makes the distinction obvious.

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 parenthetical 'e.g. to fix a mistaken note' gives one concrete use case, and 'Only notes you can delete in the panel' implies a permission/scope limit. There is no guidance on when not to use it, how to discover the right note first (e.g. via list/get tools), or what to do if multiple notes match.

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

download_resumeDownload resumeC
Read-only

Download an applicant's attached resume file (usually PDF) and return its local path, ready to be read.

Default folder: JOBINJA_DOWNLOAD_DIR//.

NameRequiredDescriptionDefault
postYes
dest_dirNo
page_hintNo
applicant_idYes

TDQS

C2.6/5.0
Behavior1/5

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

The description says the tool downloads a file and returns a local path, defaulting to JOBINJA_DOWNLOAD_DIR/<post>/. That implies creating or writing a file on the local filesystem, which contradicts the readOnlyHint=true annotation stating the tool does not modify its environment.

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-load the action and result, then immediately state the default folder. There is no unnecessary text, and the key scoping detail appears early.

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?

For a four-parameter download tool with no output schema, the description covers the return path and default folder but omits important details: what dest_dir does, when page_hint matters, overwrite behavior, and error handling when no resume exists. It is not complete enough for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It partially clarifies 'post' through the default folder path and implies 'applicant_id' via 'an applicant's attached resume,' but says nothing about 'dest_dir' or 'page_hint,' leaving half the parameters undocumented.

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 a specific verb and resource ('Download an applicant's attached resume file') and names the return value ('local path'). It is clear what the tool does, though it does not explicitly distinguish itself from the sibling download_resumes or get_resume_text.

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?

Usage is only implied by the singular 'an applicant's attached resume.' The description provides no explicit when-to-use guidance, no when-not-to-use conditions, and no reference to alternatives such as download_resumes for multiple resumes or get_resume_text for extracted text.

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

download_resumesDownload resumes in bulkA
Read-only

Bulk-download resumes for a job ad, newest first, optionally filtered by status / starred (see list_applicants).

Downloads at most limit files into JOBINJA_DOWNLOAD_DIR// (or dest_dir). Viewing pending applicants marks them as seen, as in the panel.

NameRequiredDescriptionDefault
postYes
limitNo
statusNo
starredNo
dest_dirNo

TDQS

A3.9/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: writes at most `limit` files into JOBINJA_DOWNLOAD_DIR/<post>/ (or dest_dir), returns newest first, and — critically — discloses that viewing pending applicants marks them as seen. That side-effect disclosure is exactly the kind of context annotations don't carry. There is mild tension with readOnlyHint=true, but the description tells the truth rather than misleading, so it is disclosure, not 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?

Three short lines, purpose front-loaded, then destination/limit mechanics, then the side-effect warning. Every sentence adds information; nothing restates the title or 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?

For a 5-parameter side-effecting tool with no output schema, it covers destination, ordering, cap, and the seen-marking side effect. It could still say what is returned (file paths?) or what happens when existing files are present, but an agent can call it correctly as written.

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?

With 0% schema description coverage the description has to carry the burden, and it mostly does: `limit` is an upper bound on files, `post` determines the subdirectory, `dest_dir` overrides the default location, and status/starred are filters (deferred to list_applicants). It omits the default values (limit=25, starred=false) and the allowed status values, so not a 5.

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 with scope: 'Bulk-download resumes for a job ad, newest first'. The word 'Bulk' plus the job-ad scoping distinguishes it in practice from the sibling download_resume, though it never names that sibling explicitly.

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 (bulk fetch with optional status/starred filters) and routes the reader to list_applicants for filter semantics, but never states when to prefer this over download_resume (single file) or when not to use it. Guidance is implied rather than explicit.

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

get_applicantGet applicant detailsB
Read-only

Get one applicant: contact info, profile fields, Jobinja profile text, star, team notes, current decision and rejection reason.

applicant_id comes from list_applicants; page_hint (the list page it was on) makes lookup faster. Like opening it in the panel, viewing an unreviewed (pending) applicant marks it as seen.

NameRequiredDescriptionDefault
postYes
page_hintNo
applicant_idYes

TDQS

B3.4/5.0
Behavior1/5

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

The description discloses that "viewing an unreviewed (pending) applicant marks it as seen" — a persisted state change — while annotations declare readOnlyHint=true. That is a direct conflict on the exact property the readOnly hint is meant to guarantee, and an agent relying on the annotation could call this as a harmless peek and silently mutate applicant state. The description itself is honest; the mismatch is what forces the low score.

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 the payload contents, then parameter provenance, then the side-effect warning — a sensible ordering with no filler. The telegraphic, fragment style is dense but every clause carries information; minor deduction only for the slightly clipped phrasing that makes the side-effect note easy to skim past.

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 no output schema, the description does a good job enumerating return fields, and it flags the seen-marking side effect. But for a 3-parameter record fetch with a state-changing side effect, it leaves the required `post` parameter undefined and says nothing about behavior for a nonexistent applicant or invalid page_hint.

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 0%, so the description must carry the load. It explains applicant_id's source and page_hint's meaning ("the list page it was on"), which is real added value, but the required `post` parameter is never mentioned at all and no formats are given (string id shape, how post interacts with the applicant lookup).

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 and resource ("Get one applicant") and enumerates exactly what is returned: contact info, profile fields, Jobinja profile text, star, team notes, decision, rejection reason. This is clearly a single-record fetch, distinguishable from list_applicants and from the resume/download siblings without opening any schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent: applicant_id "comes from list_applicants," and page_hint is described as an optional accelerator ("makes lookup faster"), so the agent knows how to obtain inputs and when the optional param is worth supplying. It does not, however, say when to prefer a sibling such as get_resume_text over this tool for resume content.

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

get_resume_textGet resume textA
Read-only

Extracted plain text of an applicant's PDF resume, truncated to max_chars.

Much cheaper in tokens than reading the PDF itself. Scanned (image-only) PDFs give little or no text; use download_resume for those.

NameRequiredDescriptionDefault
postYes
max_charsNo
page_hintNo
applicant_idYes

TDQS

A4/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, and the description adds genuinely useful context beyond that: output is truncated to max_chars, it is cheap in tokens relative to the PDF, and scanned PDFs degrade to little or no text. It doesn't say what happens at the truncation boundary or whether page_hint changes the extraction window.

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, front-loaded with what the tool returns, then the cost rationale, then the failure mode and escape hatch. Every sentence carries information an agent needs.

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?

For a read-only extraction tool with no output schema, the description covers the return shape, truncation, and the scanned-PDF failure mode well. However, with 0% schema coverage across four parameters, the unexplained page_hint and the underspecified post/applicant_id identifiers leave the invocation contract incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter meaning, and it only explains max_chars (via the truncation clause). post and applicant_id are only indirectly gestured at, and page_hint is entirely undocumented in both the schema and the description, leaving a required identifier and an optional hint unexplained.

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 and resource ('Extracted plain text of an applicant's PDF resume') plus the truncation behavior, so the agent knows exactly what it gets back. It also implicitly distinguishes itself from download_resume by naming that sibling as the alternative for scanned PDFs.

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 names the condition that selects the alternative: image-only PDFs should go to download_resume, and the token-cost note explains why this tool is preferred otherwise. It does not cover other contextual decisions, such as when to prefer get_applicant or how page_hint should influence the choice.

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

jobinja_statusCheck Jobinja sessionA
Read-only

Check whether the saved Jobinja session is still logged in and which company panel it uses.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and idempotentHint=false, so the safety profile is covered. The description adds that the session is 'saved' (persisted state), but it doesn't say what a negative result looks like or whether the check touches the network, which matters given the non-idempotent and open-world hints.

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, and the two key outcomes (logged in / which company panel) are stated up front.

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?

With no parameters and no output schema, the description should hint at the return shape; 'which company panel it uses' partially does, but an agent still doesn't know the exact response fields or failure signal. Otherwise complete for a trivial status-check 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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-level claims are needed or missing.

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 ('Check') and a specific resource ('saved Jobinja session'), plus two concrete facts it resolves: login state and the company panel in use. This is clearly distinct from sibling tools like open_login_window or the applicant-listing tools.

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: an agent can infer this is a pre-flight session check, but the description never says when to call it versus open_login_window, nor what to do when the session is expired. No explicit when/when-not guidance is provided.

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

list_applicantsList applicantsA
Read-only

List applicants of a job ad, 25 per page (newest first by default).

post: short id from list_posts (e.g. "tMEO"). status: pending (unreviewed) | read (awaiting decision) | interview | hired | dismissed | expired | canceled. starred / has_notes: only starred applicants / only those with team notes. sort: id (newest) | id_asc (oldest) | relevance. Each row has applicant_id (for the other tools), status, starred flag, note count and folders.

NameRequiredDescriptionDefault
pageNo
postYes
sortNoid
statusNo
starredNo
has_notesNo

TDQS

A3.9/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 safety profile is covered. The description adds real context beyond that: 25 records per page, newest-first default ordering, and the shape of each returned row including applicant_id for follow-up tools.

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?

Front-loaded with the core action and page size, then parameter semantics in tight label-colon lines. No filler, and each line carries distinct 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?

For a six-parameter read-only list tool with no output schema, it covers paging, ordering, filtering, and the returned fields. It stops short only of clarifying the boundary against the folder-scoped sibling.

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 description coverage is 0%, so the description must carry the load, and it does: it defines `post` with its source and an example, enumerates every `status` value and `sort` value with meaning, and explains the starred/has_notes filters. Only `page` is left unstated beyond the implied 25-per-page paging.

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 states a specific verb (list) and resource (applicants), scoped to a job ad, plus paging behavior. It does not distinguish itself from the sibling list_folder_applicants, which an agent could reasonably confuse it with.

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

Usage Guidelines3/5

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

It implies usage by explaining that `post` comes from list_posts and by defining filters, but it never states when to prefer this over list_folder_applicants or screen_applicants. The routing decision is left to inference.

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

list_folder_applicantsList applicants in folderA
Read-only

List applicants saved in a resume folder, 25 per page. Each row includes the post it applied to.

NameRequiredDescriptionDefault
pageNo
folder_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this is a read-only operation, and the description adds useful behavioral detail beyond them: 25 results per page and that each row includes its `post`. It still omits ordering, error behavior, and whether additional pagination metadata is returned.

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 operation and followed by pagination and row-content details. There is no redundant or filler text.

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 read-only, two-parameter listing tool without an output schema, the description covers the essential call behavior: folder scope, page size, and a notable returned field. It could be more complete about result shape and pagination limits, but the core invocation context is present.

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 0%, so the description must carry parameter meaning. It partially does: it explains that results are 25 per page, clarifying the `page` parameter, and frames `folder_id` as a resume folder, but it does not explain how to obtain the folder ID or how page numbering works.

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 states a specific verb and resource: list applicants saved in a resume folder. It does not distinguish this from the sibling `list_applicants`, so sibling routing is left implicit.

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 folder-scoped wording implies this is for listing applicants within one folder, but the description never says when to use it instead of `list_applicants` or other applicant-listing tools. No exclusions or prerequisites are given.

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

list_foldersList resume foldersA
Read-only

List the company's resume folders (پوشه‌های رزومه) with their ids and per-stage counts.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

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, openWorldHint=true, and idempotentHint=false, so the safety profile is mostly covered. The description adds scope ('company's') and mentions the returned fields, but it does not elaborate on behavior beyond annotations such as whether folders are shared globally or edge cases.

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 front-loaded sentence with no wasted words. It states the resource and the key returned information efficiently.

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, rich annotations, and an output schema, the description is nearly complete for invocation purposes. It could mention how folders relate to folder-scoped siblings like list_folder_applicants, but nothing essential is missing.

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 has zero parameters, so there is no parameter semantics burden; baseline is 4. The description does not need to explain inputs beyond noting the listing scope.

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 a specific verb and resource ('List the company's resume folders') and adds useful return detail ('with their ids and per-stage counts'). It is clear what the tool does, but it does not explicitly differentiate itself from sibling list_folder_applicants or explain folder-related context.

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 explicit guidance on when to use this tool, when not to use it, or which sibling to choose for related tasks. The listing intent is obvious from the name and description, but no usage conditions or alternatives are provided.

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

list_postsList job adsA
Read-only

List the company's job ads with applicant counts.

status: all | active | rejected | draft | closed | archived. Each item has post (short id such as "tMEO", used by the other tools), numeric post_numeric_id, title, publish state and per-stage counts.

NameRequiredDescriptionDefault
statusNoall

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/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 safety profile is covered. The description adds genuine behavioral context beyond that: the six possible status values, the fact that results carry per-stage applicant counts, and the cross-tool key (`post` short id) an agent needs to chain into other calls. It does not mention pagination or result limits, which matters for a list endpoint.

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 the core action and scope, then a compact status list, then the result shape. No filler, though the final item-shape sentence partly duplicates the existing output schema and is the least load-bearing line.

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 the return-value explanation is optional reinforcement rather than a gap-filler. With safety covered by annotations and the only parameter fully enumerated, the remaining shortfall is workflow guidance — which sibling to use for applicant-level queries — for an agent operating among 18 related 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?

Schema description coverage is 0% and the single `status` parameter has no enum in the schema, so the description carries the full burden — and it does, enumerating all six accepted values with `all` as the implied default. What it lacks is any hint about how filtering interacts with counts or what an unknown status does.

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 ("List the company's job ads with applicant counts"), which is clearly distinct from the applicant-oriented siblings like list_applicants and get_applicant. It does not explicitly name an alternative, so the differentiation comes from the resource noun rather than an explicit contrast.

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 by the status vocabulary, but there is no explicit statement of when to call this versus list_applicants or list_folder_applicants, and no prerequisites or exclusions. The note that `post` is the short id "used by the other tools" hints at workflow ordering but never spells it out.

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

list_rejection_reasonsList rejection reasonsA
Read-only

Rejection reasons accepted by reject_applicant (code -> panel label).

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

It adds vital information not in the structured data—the mapping between rejection code and the human-readable panel label. This is more informative than simply stating the data exists.

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 definition is extremely tight and focused, providing the critical functional definition in a single, highly efficient statement.

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 lookup function, the description is highly complete. It tells the agent exactly what the tool provides so it can be invoked safely and correctly.

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?

Since the tool accepts zero parameters and schema coverage is 100%, the baseline score of 4 applies. The description does not need to compensate for schema gaps.

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 defines the resource (rejection reasons), the context (accepted by reject_applicant), and the specific format of the data provided (code to panel label).

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 offers no guidance on when to use this specific list tool versus other similar functions in the extensive list of siblings. It is purely descriptive of function.

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

open_login_windowOpen Jobinja login windowA
Read-only

Open a browser window on the user's screen to sign in to the Jobinja employer panel (first use, or when jobinja_status reports the session expired). The user types their own credentials; waits up to 10 minutes.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint=false), it discloses that the user supplies credentials themselves — no credential passing by the agent — and that the call blocks for up to 10 minutes. What is missing is what happens at timeout (failure vs. pending) and whether the tool can be re-invoked safely given idempotentHint=false.

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, no waste, with the purpose front-loaded and the trigger condition following. The parenthetical timeout detail 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?

With no parameters, no output schema, and annotations covering the safety profile, the description covers nearly everything an agent needs. The remaining gap is post-call behavior — what a returned result or timeout means for retry — which matters because the call is interactive and non-idempotent.

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 disambiguate; baseline 4 applies. The description's mention of the 10-minute wait is useful context about invocation behavior rather than parameters.

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 concrete verb and resource — opening a browser window on the user's screen for signing in to the Jobinja employer panel — which no sibling tool does. It also names the related status tool, so an agent can place it in the workflow immediately.

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

Usage Guidelines5/5

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

Gives explicit trigger conditions: 'first use, or when jobinja_status reports the session expired', naming the sibling whose output selects this tool. Nothing about when to call it is left to inference.

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

reject_applicantReject applicantA
Destructive

Mark an applicant as rejected (نامناسب) with a reason code from list_rejection_reasons.

Jobinja notifies the candidate of the rejection; message is optional extra text sent to the candidate with it (not an internal note: use add_note for that). dry_run=true fills the rejection form without submitting it.

NameRequiredDescriptionDefault
postYes
reasonYes
dry_runNo
messageNo
page_hintNo
applicant_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructive/openWorld/non-idempotent, but the description adds the crucial consequence the annotations cannot express: Jobinja notifies the candidate, so this is externally visible and irreversible in a human sense. It further discloses that dry_run populates the form without submitting, which is meaningful behavioral context beyond the hints.

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, front-loaded with the action and reason-code source, followed by the side effect and the dry-run option. No filler, and the parenthetical Persian term aids matching against the UI.

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?

With no output schema and six parameters, the description covers the risky and ambiguous parts (notification side effect, message semantics, dry_run) well. It stops short of explaining `page_hint` or what a successful call returns/changes, leaving a small but real gap for a destructive tool.

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 0%, so the description must carry all parameter meaning. It does well for `reason`, `message` and `dry_run`, but says nothing about `post`, `applicant_id`, or `page_hint` (the last being especially opaque — likely a pagination/retry aid). Half the parameters remain undefined in both schema and prose.

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 and resource ('Mark an applicant as rejected') and immediately pins down the mechanism ('with a reason code from list_rejection_reasons'), which names a sibling tool and disambiguates the input source. An agent can distinguish this from restore_applicant or add_note without opening the schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: reason codes come from list_rejection_reasons, and internal commentary belongs in add_note rather than `message` ('not an internal note: use add_note for that'). It also explains when to use dry_run, giving a clear non-destructive trial path.

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

restore_applicantRestore applicant to awaiting decisionA
Destructive

Undo a decision: move an applicant back to "awaiting decision" (در انتظار تعیین وضعیت). Jobinja notifies the candidate.

NameRequiredDescriptionDefault
postYes
page_hintNo
applicant_idYes

TDQS

A3.5/5.0
Behavior4/5

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

The annotations already disclose destructiveHint=true, idempotentHint=false, and openWorldHint=true. The description adds meaningful context beyond that: it names the exact state the applicant returns to and discloses the candidate-notification side effect of the operation.

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, with the core action ('Undo a decision') front-loaded and no filler. Every clause adds information an agent can use.

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?

For a destructive, non-idempotent mutation with no output schema, the description covers the state transition and the notification side effect, which is the most important behavioral context. It is still incomplete on permissions/requirements and on any of the three parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning, but it never mentions post, applicant_id, or page_hint. The applicant_id is inferable from 'an applicant,' yet page_hint is completely unexplained, leaving a real gap.

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 ('Undo a decision: move an applicant back to awaiting decision') with the exact target state, which lets an agent distinguish it from the sibling reject_applicant. It does not name the sibling explicitly, 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 Guidelines3/5

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

'Undo a decision' implies the usage context, and the existence of reject_applicant makes the reverse relationship inferable. However, there are no explicit when-to-use/when-not conditions or named alternatives, so guidance is only implied.

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

screen_applicantsScreen applicants (compact digest)A
Read-only

Compact screening digest of one page (up to 25) of applicants, for fast, low-token shortlisting.

For each applicant: headline, status, star, notes, folders, key profile fields (work history, education, skills) and the first resume_chars characters of the PDF resume text. Gender, birth year, marital status and contact details are left out on purpose. Read the digests, then use get_resume_text / get_applicant only for the promising ones. Takes about a minute per page; opening pending applicants marks them as seen.

NameRequiredDescriptionDefault
pageNo
postYes
statusNo
resume_charsNo
profile_charsNo

TDQS

A3.8/5.0
Behavior2/5

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

The description is unusually informative about behavior: it discloses field inclusion/exclusion, token-cost tradeoffs, per-page latency, and the side effect that 'opening pending applicants marks them as seen'. However, that side effect conflicts with the declared readOnlyHint=true annotation, so an agent relying on the annotation's safety guarantee would be misled. Content is rich but the safety-relevant inconsistency with structured metadata caps the score.

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 the purpose and scope, then the returned fields, then the routing advice. Dense but each sentence carries information; only the bilingual coda about usage is redundant with the earlier routing sentence.

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?

There is no output schema, and the description does a good job describing the digest contents and omissions, so the return shape is covered. But with 0% schema coverage and 5 parameters, key inputs (required `post`, `status`, `profile_chars`) remain unexplained, leaving an agent guessing how to scope the screening call.

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 0%, so the description must carry the burden, and it only partially does: it explains resume_chars ('first `resume_chars` characters of the PDF resume text') and page size ('up to 25'), and gestures at profile_chars via 'key profile fields', but says nothing about the required `post` parameter or the `status` filter. The two most decision-relevant parameters are left undefined.

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 and resource ('Compact screening digest of one page (up to 25) of applicants') plus the exact field set returned, so an agent can distinguish it from get_applicant and get_resume_text immediately. The stated intent, fast low-token shortlisting, frames the resource precisely.

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

Usage Guidelines5/5

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

Explicitly says to read digests first and to call get_resume_text / get_applicant only for promising applicants, naming the alternatives and the condition that selects them. It also gives a cost expectation ('about a minute per page') that supports the bulk-vs-single decision.

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

set_applicant_foldersAdd or remove applicant from foldersA
DestructiveIdempotent

Add an applicant to and/or remove it from resume folders. add / remove take folder ids or exact titles (see list_folders; use create_folder first for a new one). Returns the applicant's folders afterwards.

NameRequiredDescriptionDefault
addNo
postYes
removeNo
page_hintNo
applicant_idYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare the mutation profile (non-read-only, destructive, idempotent, open-world), so the description does not need to repeat that. It adds useful behavioral context by saying add/remove accept folder ids or exact titles and that the tool returns the applicant's folders afterwards.

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 short, front-loaded with the core operation, and each sentence adds useful information. The parenthetical prerequisites are compact and relevant.

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?

For a 5-parameter mutation tool with no output schema and 0% schema description coverage, the description covers the core operation, lookup/creation prerequisites, and return behavior. However, it does not explain the required post parameter or the page_hint parameter, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains add/remove accept folder ids or exact titles, but it leaves post, applicant_id, and page_hint unexplained; post is required and opaque.

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 states a specific verb pair and resource: add/remove an applicant from resume folders. It also distinguishes this tool from folder-management siblings by pointing to list_folders and create_folder for related operations.

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 gives clear context for use and prerequisites, telling the agent to look up folders via list_folders and to use create_folder first for new folders. It does not explicitly state when not to use the tool, but the intended usage is clear.

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

set_starStar or unstar applicantA
Idempotent

Star (starred=true) or unstar (starred=false) an applicant. Stars are internal to the company.

NameRequiredDescriptionDefault
postYes
starredNo
page_hintNo
applicant_idYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the mutation profile is covered. The description adds a genuinely useful, non-redundant fact — stars are internal to the company (visibility scope) — but says nothing about permissions, whether unstarring destroys prior state, or 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.

Conciseness5/5

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

Two short sentences, the primary action and its parameter mapping front-loaded, with the visibility caveat as trailing context. No filler.

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?

No output schema and no annotation gaps on safety, so the description mainly needs to cover the four undocumented parameters. It handles 'starred' well but leaves 'post' (required) and 'page_hint' undefined, so an agent must guess at part of the call.

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?

With 0% schema description coverage, the description must compensate, and it does for the key ambiguity: it explains that starred=true stars and starred=false unstars, resolving the boolean default of true. However, the required 'post' parameter and the 'page_hint' parameter are left entirely unexplained, so the compensation is only partial.

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?

Names a specific verb pair (star/unstar) and the exact resource (an applicant), so the agent knows precisely what changes. It is clearly distinct from siblings like set_applicant_folders, reject_applicant, or add_note.

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 by the boolean toggle, but the description never states when to star versus when another tool (e.g., set_applicant_folders or add_note) is the better choice, nor any preconditions. Minimum viable guidance only.

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. 19 tool updatesv0.3.1
    • First observedadd_note
    • First observedcreate_folder
    • First observeddelete_note
    • First observeddownload_resume
    • First observeddownload_resumes
    • First observedget_applicant
    • First observedget_resume_text
    • First observedjobinja_status
    • First observedlist_applicants
    • First observedlist_folder_applicants
    • First observedlist_folders
    • First observedlist_posts
    • First observedlist_rejection_reasons
    • First observedopen_login_window
    • First observedreject_applicant
    • First observedrestore_applicant
    • First observedscreen_applicants
    • First observedset_applicant_folders
    • First observedset_star

TDQS

B3.4/5.0

Scored across 19 tools

Disambiguation4/5

Most tools have clearly distinct targets (list vs. screen vs. download resume, reject vs. restore, notes vs. stars vs. folders). A few boundaries could blur—list_applicants vs. screen_applicants vs. list_folder_applicants and download_resume vs. download_resumes vs. get_resume_text overlap in purpose—but descriptions explicitly disambiguate with token-cost and scope guidance.

Naming Consistency4/5

Strong verb_noun snake_case pattern throughout (list_posts, get_applicant, download_resume, add_note, reject_applicant). Minor deviations exist: list_folder_applicants breaks the noun ordering used elsewhere, and jobinja_status is noun-based rather than verb-based.

Tool Count4/5

19 tools for a full employer-side applicant workflow (session, posts, applicants, resumes, screening, decisions, notes, folders) is reasonable and each tool maps to a real operation. It's on the heavier side but not bloated with redundant tools.

Completeness3/5

Coverage is broad—listing, viewing, downloading, screening, rejection, restore, notes, stars, folders, session handling—but there's a notable gap: no tool to advance an applicant to interview/hired stage, despite those statuses being filterable and counted. The decision lifecycle is therefore one-sided (reject/restore only).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to fetch and structure job postings from major ATS platforms (Greenhouse, Lever, Ashby, etc.) directly, eliminating copy-paste and context loss.
    79 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects an AI assistant to a job-matching account so it can read roles matched to your resume, pull full job details and hiring contacts, and save tailored resume versions. With explicit opt-in and per-job confirmation in the chat, it can also start applications, relay questions only you can answer, and report each application's status.
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to automate recruiter-side hiring workflows by batch-searching candidates, capturing resume screenshots, extracting share links, filtering and scoring profiles, sending greetings, and exporting Markdown reports.
    -