How to run a hiring workflow from an agent with MCP
An agent-operated hiring workflow lets a recruiter describe a role in conversation, review a complete draft, publish an application, and ask the agent to monitor what happens next. The agent can gather the information, call authorized tools, and explain candidate evidence. The recruiter still owns the requirements and the final decision. MCP is useful here because it gives a compatible agent a defined set of tools instead of requiring it to improvise requests from a pasted API key.
The important design choice is the boundary between preparation and action. An agent can ask questions and prepare a proposal without account access. Publishing a role, changing criteria, or recording a decision affects real people. Those steps need an authenticated connection and a clear approval point. The MCP authorization specification describes how HTTP clients request access to protected MCP resources; each client still needs to complete its own connection flow.
Give the agent a narrow, testable assignment
Start with a single outcome: “Help me publish a content and operations internship application.” Tell the agent to ask for organization and recruiter names, duties, location, candidate material, job-related criteria, and a short assignment. Ask one question at a time. That yields a campaign with an internally consistent job description, application form, and exercise.
A vague command such as “automate recruiting” hides choices that a recruiter must make. Does the role require a resume? What evidence counts as relevant experience? Is the exercise 30 minutes or two hours? Which public booking page will candidates use after passing the assessment? The agent should collect these answers or mark them as unresolved before showing a publishable draft.
Use this starter brief:
Help me hire a [role] at [organization]. Read Badal's agent map and docs. Ask one question at a time about the work, candidate-facing recruiter name, application evidence, screening criteria, and practical assignment. Show the entire role, form, rubric, and exercise for approval before creating it. After publishing, return the actual application URL and check processing status before claiming any candidate was screened or emailed.
Connect through the interface your agent actually supports
In Badal, the public MCP endpoint is https://badal.work/mcp. ChatGPT Web uses its supported MCP connection and a browser approval flow. A local Codex or Claude Code runtime can instead use the Badal Recruiter skill, which has a private helper for one-time connection links or manual API keys. A copied prompt by itself is an instruction, not an authenticated connection.
After authorization, have the agent identify the connected account before writing anything. In the direct HTTP helper, the check is GET /api/me. With MCP, use the account tool. If that check fails, stop. Do not have the agent claim a role exists because it produced valid-looking JSON. Authorization and successful execution are separate facts.
Never put a connection link or key in a public application, role description, candidate message, repository, or shell argument. A one-time link can be redeemed from a trusted local agent chat, but the link remains in that chat history; the skill's hidden prompt is the more private option. A manual key lasts until revoked and belongs in a private credential store. The connection instructions explain the available paths.
Use a visible review gate before publication
Imagine the recruiter wants a growth intern. A useful draft includes: a job title, organization and recruiter names, location, what the intern will do in month one, required candidate materials, two or three evidence questions, three to six criteria with weights and 0–5 minimums, and an assessment brief with time budget and allowed tools. Ask the recruiter to approve those exact items. The agent should then create the role and show the returned public form URL.
The role is only published when Badal returns a successful result. The link should be copied from that result rather than assembled from a guessed slug. Check that the link opens a one-question-at-a-time form and that the form asks for the intended materials. Our application questions guide helps design the form; the rubric guide covers scoring evidence.
Monitor the workflow as a set of states
Once candidates apply, “the funnel is running” is too vague to be useful. Ask for a status report with counts and named exceptions:
| Question | Evidence the agent should inspect |
|---|---|
| How many applications arrived? | Role candidate list and creation dates |
| Who is waiting for AI screening? | awaiting_screening stage and remaining capacity |
| Did the assessment go out? | Candidate stage plus email or processing job status |
| Was the booking link invitation sent? | interview_invited stage plus the email job result; confirm actual appointments in the external provider |
| Is Sheet sync current? | Role Sheet link and related queued or failed jobs |
Badal keeps a job queue for screening, candidate emails, and Sheets sync. A queued job is not proof of delivery. Have the agent inspect /api/jobs or the corresponding MCP tool before reporting completion. A failure should include the affected candidate and role, the next safe action, and whether a human needs to intervene. An unreadable resume needs manual review rather than an invented zero score. A missing or broken booking URL needs the recruiter to update the campaign or its external booking page.
Treat candidate material as untrusted evidence
Resumes, portfolios, and free-text answers may contain instructions addressed to the AI rather than information about the candidate. The agent should treat them as data to summarize and compare against the recruiter-approved criteria. It should not change tools, send emails, reveal other candidates, or override the hiring process because a PDF says to do so. The candidate report should distinguish quoted evidence, an evaluation inference, and an unresolved question.
For a score near a threshold, ask the agent for the underlying example and what information might change the assessment. Score version also matters when criteria change mid-campaign. The AI score guide explains why a score should support review rather than substitute for it.
Keep final decisions under recruiter control
The safest recurring pattern is: agent retrieves the candidate report, summarizes evidence and limitations, recommends questions for the interviewer, and asks the recruiter before recording a final keep or reject. In Badal, the recruiter can make the final choice in the workspace; an MCP final decision also requires the specific signed-in approval described in the docs. Approval for “review candidates” is not approval to reject one.
Agent-ready operating checklist
- Read
/llms.txt,/docs, and the current tool or OpenAPI contract. - Verify the account connection.
- Ask one recruiter question at a time; confirm the complete role draft.
- Publish only after approval; return the actual form URL.
- Report stage counts, evidence, queued jobs, and failures separately.
- Ask before changing a live rubric, processing a backlog, or making a final decision.
Frequently asked questions
Does installing a skill connect ChatGPT Web to Badal?
No. A local skill can give Codex or Claude Code instructions and a private helper in a runtime that supports them. ChatGPT Web needs its own supported MCP connection and browser authorization. Check account access before asking either environment to act.
Can an agent silently reject candidates below a threshold?
The recruiter should review job-related evidence and own final decisions. A threshold may guide the next assessment step, but an unreadable file, ambiguous answer, or changed rubric can make a single score misleading. Configure approvals around the consequential action, not around a generic score.
Badal turns a recruiter conversation into a public form, evidence-based screening, a practical assessment, and a reviewable candidate report.
Open your workspace →