jobctl is a remote MCP server that gives an AI agent 11 tools, among them add_application, add_note, attach_analysis. It answers at https://app.jobctl.app/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 5 of 6 times since 11 September 2026; the last check, on 19 October 2026, succeeded.
Job application tracker for developers - AI agents write over MCP, you review in a dashboard.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
add_application | 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 applicati Inputs: raw, company, role, status, priority, remote |
add_note | 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, offe Inputs: application_id, text |
attach_analysis | 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 in Inputs: application_id, markdown |
attach_file | 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 Inputs: application_id, kind, filename, data_base64, mime |
attach_interview_file | 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; Inputs: application_id, interview_id, filename, data_base64, mime |
get_application | 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). Inputs: id |
get_due | 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. |
get_planned | 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 Inputs: range |
list_applications | 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({ Inputs: view, status, priority, q, limit |
log_interview | 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 rec Inputs: application_id, scheduled_at, status, attendees, links, recap |
update_application | 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: Inputs: id, company, role, status, priority, remote |
Every block below points at https://app.jobctl.app/mcp. Pick your client and copy.
claude mcp add --transport http jobctl https://app.jobctl.app/mcp
{
"mcpServers": {
"jobctl": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://app.jobctl.app/mcp"]
}
}
}{
"mcpServers": {
"jobctl": {
"url": "https://app.jobctl.app/mcp"
}
}
}{
"servers": {
"jobctl": {
"type": "http",
"url": "https://app.jobctl.app/mcp"
}
}
}{
"context_servers": {
"jobctl": {
"url": "https://app.jobctl.app/mcp"
}
}
}{
"mcpServers": {
"jobctl": {
"serverUrl": "https://app.jobctl.app/mcp"
}
}
}{
"mcpServers": {
"jobctl": {
"url": "https://app.jobctl.app/mcp"
}
}
}name: jobctl
version: 0.0.1
schema: v1
mcpServers:
- name: jobctl
type: streamable-http
url: https://app.jobctl.app/mcp{
"mcpServers": {
"jobctl": {
"httpUrl": "https://app.jobctl.app/mcp"
}
}
}{
"mcpServers": {
"jobctl": {
"type": "http",
"url": "https://app.jobctl.app/mcp"
}
}
}{
"mcpServers": {
"jobctl": {
"url": "https://app.jobctl.app/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fapp.jobctl.app%2Fmcp&type=streamable_http&id=jobctl&name=jobctl
It answered our last check on 19 October 2026 in 197 ms. Over 6 checks since 11 September 2026 it answered 5. Status here comes from Neuronto's own probes, not from the publisher.
11, as returned by the server's own tools/list on 12 September 2026: add_application, add_note, attach_analysis, attach_file, attach_interview_file, get_application, get_due, get_planned, and 3 more.
It answered our last check on 19 October 2026 in 197 ms. Over 6 checks since 11 September 2026 it answered 5.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://app.jobctl.app/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: io.github.dmytrorybka. Endpoint host: app.jobctl.app. ARD identifier: urn:air:io.github.dmytrorybka:mcp:jobctl.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.