accueil / serveurs / Fichiers & Documents / io.github.DmytroRybka/jobctl
io.github.DmytroRybka/jobctl
serveur MCP (Model Context Protocol) · jobctl 0.1.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que io.github.DmytroRybka/jobctl est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.DmytroRybka/jobctl » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 11 outils
- add_application≈ 693 tokens
Track a new job application. Pass either a single `raw` line — `add_application({raw: "Bosch, Tech Lead, prio A, due friday, remote, via LinkedIn"})` — or structured fields (`company` and `role` required then). Returns the created application and possible-duplicate warnings; if duplicates are listed, tell the user instead of creating again.
Paramètres, retour & exemple (19)
Paramètresraw· string · optionnel
Free-form line: "Company, Role, prio A|B|C, due <date>, remote|hybrid|onsite, via <source>, https://…, in <location>, applied <date>"url· string · optionnel
Link to the job postingrole· string · optionnelremote· string · optionnel · remote | hybrid | onsite | unknownsource· string · optionnel
LinkedIn, referral, recruiter, Easy Apply…status· string · optionnel · started_apply | waiting_referral | applied | waiting | interview | offer | accepted | rejectedcompany· string · optionnellocation· string · optionnelpriority· string · optionnel · A | B | C
A = top priorityapplied_at· string · optionnel
ISO date YYYY-MM-DDcv_variant· string · optionnel
Which CV was sent: DE, EN, AI-focused…match_notes· string · optionnel
Markdown match assessment: why the candidate fits this role — strengths vs requirements, gaps, level/salary advice, process notes. Save your vacancy analysis here so it is not lost; shown as an expandable section in the dashboard.next_action· string · optionnel
e.g. "follow-up", "thank-you email"remote_note· string · optionnel
e.g. "2 days office"salary_asked· integer · optionnel
What the candidate asked for — yearly gross EUR as a plain number, e.g. 110000salary_range· integer · optionnel
Posting salary range upper bound — yearly gross EUR, plain numbernext_action_due· string · optionnel
ISO date YYYY-MM-DDsalary_range_min· integer · optionnel
Posting salary range lower bound — yearly gross EUR, plain numbernext_interview_at· string · optionnel
ISO datetime, e.g. 2026-07-20T14:00:00+02:00
Exemple d'appel{"name": "add_application", "arguments": {"raw": "texte", "url": "texte", "role": "texte", "remote": "remote", "source": "texte", "status": "started_apply"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - add_note≈ 209 tokens
Append a free-text note to an application timeline — recruiter call summaries, interview instructions, pasted messages. Multiline markdown is fine. Example: `add_note({application_id: "…", text: "Recruiter: team of 5, on-call rotation, offer range 85-95k"})`.
Paramètres, retour & exemple (2)
Paramètrestext· string · requisapplication_id· string · requis
Exemple d'appel{"name": "add_note", "arguments": {"text": "texte", "application_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - attach_analysis≈ 250 tokens
Attach a markdown company analysis (research you produced) to an application. Single document per application — a new call REPLACES the previous one. Max 100000 bytes (~100 KB) of utf-8. The user reads it in the dashboard, e.g. before an interview. Example: `attach_analysis({application_id: "…", markdown: "# Bosch\n\n## Culture…"})`.
Paramètres, retour & exemple (2)
Paramètresmarkdown· string · requis
The analysis as markdownapplication_id· string · requis
Exemple d'appel{"name": "attach_analysis", "arguments": {"markdown": "texte", "application_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - attach_file≈ 368 tokens
Attach or replace a file on an application so the user sees it in the dashboard: a CV/resume (kind: 'cv') or a cover letter (kind: 'cover_letter'). Pass the file bytes as base64 in data_base64. One file per (application, kind) - a new call REPLACES the previous one. Max ~5 MB; pdf/doc/docx/txt/md (MIME is inferred from the filename if you omit it). Call this whenever you generate a tailored CV or cover letter for an application. Example: `attach_file({application_id: "…", kind: "cv", filename: "CV_Cursor.pdf", data_base64: "JVBERi0…"})`.
Paramètres, retour & exemple (5)
Paramètreskind· string · requis · cv | cover_lettermime· string · optionnel
Optional; inferred from the filename extension when omittedfilename· string · requisdata_base64· string · requis
Base64-encoded file bytesapplication_id· string · requis
Exemple d'appel{"name": "attach_file", "arguments": {"kind": "cv", "filename": "texte", "data_base64": "texte", "application_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - attach_interview_file≈ 390 tokens
Attach prep material to a specific interview so the user sees it next to that round in the dashboard: the prep document you wrote, the job description, a deck, notes the company sent. Max 3 files per interview, 20000000 bytes (20 MB) each; pass the bytes as base64. Get interview ids from get_application. Example: `attach_interview_file({application_id: "…", interview_id: "…", filename: "prep-round2.md", data_base64: "IyBQcmVw…"})`.
Paramètres, retour & exemple (5)
Paramètresmime· string · optionnel
Optional; inferred from the filename extension when omittedfilename· string · requisdata_base64· string · requis
Base64-encoded file bytesinterview_id· string · requisapplication_id· string · requis
Exemple d'appel{"name": "attach_interview_file", "arguments": {"filename": "texte", "data_base64": "texte", "interview_id": "texte", "application_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_application≈ 168 tokens
Full detail of one application: all fields, contacts, recent timeline events, and whether a company analysis is attached (fetch it via the dashboard or attach_analysis to replace).
Paramètres, retour & exemple (1)
Paramètresid· string · requis
Exemple d'appel{"name": "get_application", "arguments": {"id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_due≈ 97 tokens
What is burning today: applications with next_action_due today or overdue. Call this when the user asks "what should I do today?" about their job search.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "get_due", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - get_planned≈ 198 tokens
What is actually SCHEDULED: interviews with their time, attendees and meeting links, plus the actions falling due, for today, tomorrow, or the next seven days. Use this whenever the user asks what is planned, what the day or week looks like, or before proposing a time to anyone — get_due only knows action deadlines and is blind to booked interviews. Example: `get_planned({range: "tomorrow"})`.
Paramètres, retour & exemple (1)
Paramètresrange· string · optionnel · today | tomorrow | week
today (default), tomorrow, or week (today plus the next 6 days)
Exemple d'appel{"name": "get_planned", "arguments": {"range": "today"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - list_applications≈ 246 tokens
List job applications. Filter by view (active = default working set, archive = rejected/withdrawn/no-response), status list, priority, or free-text search in company/role. Example: `list_applications({view: "active"})`, `list_applications({q: "bosch"})`.
Paramètres, retour & exemple (5)
Paramètresq· string · optionnel
Search in company/roleview· string · optionnel · active | interviewing | waiting | archive | alllimit· integer · optionnelstatus· string · optionnel
Comma-separated: started_apply, waiting_referral, applied, waiting, interview, offer, accepted, rejected, no_response, on_hold, withdrawn, archivedpriority· string · optionnel · A | B | C
Exemple d'appel{"name": "list_applications", "arguments": {"q": "texte", "view": "active", "limit": 1, "status": "texte", "priority": "A"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - log_interview≈ 508 tokens
Log an interview for an application (max 10 per application): when it takes place, its status (planned or done), who attends (each with an optional profile link), related links (prep materials the company sent, meeting URL), and a short recap of what was discussed. Also keeps the application's next-interview date in sync. Example: `log_interview({application_id: "…", scheduled_at: "2026-07-20T14:00:00+02:00", status: "planned", attendees: [{name: "Anna Weber (HR)", url: "https://linkedin.com/in/annaweber"}], links: [{label: "Prep materials", url: "https://company.com/interview-prep"}], recap: "System design round"})`.
Paramètres, retour & exemple (6)
Paramètreslinks· array · optionnel
Related links: prep materials, meeting URL, docsrecap· string · optionnel
Short recap of what was discussedstatus· string · optionnel · planned | done
planned (default) or doneattendees· array · optionnel
Who attends, each with an optional profile linkscheduled_at· string · requis
ISO datetime with offset, e.g. 2026-07-20T14:00:00+02:00application_id· string · requis
Exemple d'appel{"name": "log_interview", "arguments": {"scheduled_at": "texte", "application_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - update_application≈ 692 tokens
Update fields of an application (get the id from list_applications). Status changes are logged to the timeline automatically. Example: `update_application({id: "…", status: "interview", next_action: "prepare system design", next_action_due: "2026-07-20"})`.
Paramètres, retour & exemple (19)
Paramètresid· string · requisurl· string · optionnel
Link to the job postingrole· string · optionnelremote· string · optionnel · remote | hybrid | onsite | unknownsource· string · optionnel
LinkedIn, referral, recruiter, Easy Apply…status· string · optionnel · started_apply | waiting_referral | applied | waiting | interview | offer | accepted | rejectedcompany· string · optionnellocation· string · optionnelpriority· string · optionnel · A | B | C
A = top priorityapplied_at· string · optionnel
ISO date YYYY-MM-DDcv_variant· string · optionnel
Which CV was sent: DE, EN, AI-focused…match_notes· string · optionnel
Markdown match assessment: why the candidate fits this role — strengths vs requirements, gaps, level/salary advice, process notes. Save your vacancy analysis here so it is not lost; shown as an expandable section in the dashboard.next_action· string · optionnel
e.g. "follow-up", "thank-you email"remote_note· string · optionnel
e.g. "2 days office"salary_asked· integer · optionnel
What the candidate asked for — yearly gross EUR as a plain number, e.g. 110000salary_range· integer · optionnel
Posting salary range upper bound — yearly gross EUR, plain numbernext_action_due· string · optionnel
ISO date YYYY-MM-DDsalary_range_min· integer · optionnel
Posting salary range lower bound — yearly gross EUR, plain numbernext_interview_at· string · optionnel
ISO datetime, e.g. 2026-07-20T14:00:00+02:00
Exemple d'appel{"name": "update_application", "arguments": {"id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».