clera
Hire with agents, straight from your chat.
What it can do
- Whoami: Return the authenticated Clera user: email, organization memberships, the account kind (admin, company member, candidate, or none), and what setup steps remain. When setup is not empty, work t
- SearchCandidates: Search Clera's vetted candidates who are open to opportunities and recently active or actively looking. Returns anonymized profiles: names, avatars and LinkedIn stay hidden until Cle
- SimilarCandidates: Given one candidate your company has already been shown, return other candidates whose profiles are closest to theirs, ranked by similarity. Use it when someone likes a specific pro
What data it sees
Do you need an account
No: the server works without sign-in
Hire with agents, straight from your chat.
Clera MCP puts Clera's talent network inside Claude, ChatGPT, Cursor, Codex, Grok and any MCP client. Describe the role the way you would brief a recruiter. Your assistant searches 210,000+ vetted candidates who have opted in to hearing about roles, reviews the people Clera already picked for you, and requests intros. Clera does the outreach and replies land back in the same thread.
Server URL: https://mcp.getclera.com Transport: Streamable HTTP Auth: OAuth 2.1 with dynamic client registration. Sign in with your Clera company account. Pricing: Free during the beta. Companies pay a success fee on hire. Always free for candidates. Docs: https://www.getclera.com/mcp/docs Early access: https://www.getclera.com/mcp#waitlist
How to connect
How to connect clera to Claude
The server address to paste into Claude settings:
https://clera--sebastian-pu5u.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect clera to ChatGPT
The server address to paste into ChatGPT settings:
https://clera--sebastian-pu5u.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect clera to Cursor
The server address to paste into Cursor settings:
https://clera--sebastian-pu5u.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (60)
Raw names from tools/list. Only developers need these.
| whoami | Return the authenticated Clera user: email, organization memberships, the account kind (admin, company member, candidate, or none), and what setup steps remain. When setup is not empty, work through the items with the relevant tools before moving on. Clera privately records this tool's inputs and results for usage tracking and support. |
| searchCandidates | Search Clera's vetted candidates who are open to opportunities and recently active or actively looking. Returns anonymized profiles: names, avatars and LinkedIn stay hidden until Clera has introduced the candidate to your company, but the returned id is real and is what requestIntro takes. Best results: write the ideal candidate in profile (four fields in Clera's stored profile style) and bind the role with jobId; then candidates are ranked by profile similarity, keyword match and the role's past requests and passes, and each carries advisory fit flags against the role (salary, visa, location, workplace, experience, prior decline) that never block anything. Without profile: newest profiles first, or text relevance when search_term is set. Cannot look a person up by name: names, emails and LinkedIn URLs are not searchable, so searching one returns nothing even when that person is on Clera. Asked about a named person, say profiles are anonymized and name lookup is not possible, then offer listRecommendedCandidates, listPendingIntroRequests, or a search by role and skills. Never returned: candidates already shown to your company, your own employees, or people who work at Clera; a zero result does not prove the person is not on Clera. Clera privately records this tool's inputs and results for usage tracking and support. |
| similarCandidates | Given one candidate your company has already been shown, return other candidates whose profiles are closest to theirs, ranked by similarity. Use it when someone likes a specific profile and wants more of the same, and after requestIntro to keep the shortlist moving. Chain it: run it again on a result to walk further from the original person. Similarity is computed from the whole profile (role, skills, experience and domain), not from filters, so this takes no search criteria; use searchCandidates when the ask is a requirement rather than a resemblance. Results stay within a band around the starting candidate's years of experience. Each result carries a similarity from 0 to 1 for your own screening: a low number means the open pool had nobody close, so say that instead of presenting a weak match as similar, and never show the number to the user. The same exclusions as searchCandidates apply, so people already shown to your company, your own employees, and people who work at Clera never come back, and the starting candidate is never in their own results. Clera privately records this tool's inputs and results for usage tracking and support. |
| suggestFilterValues | Resolve real, indexed values for searchCandidates filters before using them. work_history and education_history only match EXACT company/school names; always resolve the user's phrasing ('Figma', 'TUM', 'Stanford') to indexed values with this tool first, then pass those values to searchCandidates as plain filters or boolean_tags. Clera privately records this tool's inputs and results for usage tracking and support. |
| listFilterOptions | List valid values (with candidate counts) for searchCandidates filters. Returns only the requested fields, keeping the response small. Use this to discover which role_names, skills, job_types, preferred_work, countries, or languages are available before searching. work_history and education_history are too large to list here; use suggestFilterValues for those. Clera privately records this tool's inputs and results for usage tracking and support. |
| requestIntro | Ask Clera to introduce a candidate to your company for one of your open roles. Can send a confirmation email to the requesting user, start candidate outreach and submit an application to a connected hiring system. Target either a candidate from searchCandidates (talentId, with jobId or the interactive role picker) or an entry from listPendingIntroRequests / listRecommendedCandidates (its opportunityId, with talentName and roleName copied verbatim from that entry). When the user has not named a role, call this WITHOUT jobId and they pick the role in an interactive form; submitting it sends the request. Always pass a specific reason. Fit flags are never a gate: a conflict flag is something to tell the user, not a reason to withhold the call. The response carries the flags as they stand at request time; pass them on. Re-requesting the same candidate for the same role sends nothing new and is safe. Refer to candidates and roles by name; the user never sees ids. Clera privately records this tool's inputs and results for usage tracking and support. |
| passCandidate | Pass on a candidate for a specific role. Use this when the company decides a candidate from listPendingIntroRequests or listRecommendedCandidates is not a fit. Pass opportunityId, talentName and roleName copied verbatim from the same list entry; all three must describe one entry. If the candidate and role you were asked about are not on the page you fetched, re-call listPendingIntroRequests or listRecommendedCandidates with roleId to narrow or offset to page further; if the pair does not exist, say so and pass on nothing. Passing a different role for the same candidate is refused. Requires a noFitCategory and a specific reason naming what this candidate misses. This marks the opportunity as no_fit and logs the company's decision with their feedback. Clera privately records this tool's inputs and results for usage tracking and support. |
| undoPass | Undo a prior pass on a candidate, putting them back in your review list. Use this when the company asks to undo or reverse a pass for a candidate from listPassed. Pass opportunityId, talentName and roleName copied verbatim from the same listPassed entry; all three must describe one entry. A mismatch between the names and the opportunity is refused, so never substitute a different role for the same talent. Only a passed candidate can be restored; if the opportunity is not a company pass, say so and restore nothing. Clera privately records this tool's inputs and results for usage tracking and support. |
| listTeamMembers | List this company's team members on Clera plus any pending email invitations. Returns each member's name, email, and role, and each pending invite's email, role, and invited date. Roles are owner, editor, or viewer. No internal ids are returned; refer to people by name or email. Use this to check who already has access before inviting someone, so you don't re-invite an existing member or duplicate a pending invitation. Clera privately records this tool's inputs and results for usage tracking and support. |
| getDashboardLink | Returns the exact Clera dashboard URL for one section of this company's dashboard. One link per request, the one that answers the question; "my dashboard" means review. Commands: list: every link available to this company, for when you are unsure which command fits. For you only; never send the menu or several links to the user. review: the candidate review page. roleId scopes it to one role; talentId with it opens that candidate. pipeline: every candidate in process. roleId scopes it to one role; talentId with it opens that candidate. roles: the role list page. role_create: the create-a-role page. role_preview: the role as candidates will see it, with an edit button. Requires roleId. Hand it over after creating a role so the user can check how it reads. role_edit: the internal role editor. Requires roleId. role_public: the public job posting. Requires roleId; refuses when the role has no public posting. talent_search: the talent search page. Only available when Clera has enabled talent search for this company. settings_company: company profile settings, the public company information shown to candidates. settings_members: team member settings. invite true, optionally with email, opens the invite popup ready to send; Clera never sends team invites itself. settings_contacts: the company contacts settings page. settings_profile: the user's own personal profile, name and avatar only. This tool is the only source of Clera dashboard links. Never construct, guess, shorten or modify a getclera.com URL; copy the URL from this tool's output verbatim. There is no app.clera.io domain and no /org path. Clera privately records this tool's inputs and results for usage tracking and support. |
| getCandidateProfile | Full profile of a candidate already shown via searchCandidates, listRecommendedCandidates, or listPendingIntroRequests. Triggers: "tell me more about #2", "why is she a good fit", "what did he build at Stripe", any follow-up beyond the card. Works for candidates previously identified to your company, including historical named shares even after the share expires or is revoked. A candidate whose identity is still hidden from your company is refused; offer requestIntro. Resolve talentId from a tool result; never ask for or mention one; no lookup by name. Returns markdown: identity, career highlights, professional + AI summary, work experience, education, skills, certifications, languages, publications & awards. Use it to reason about fit. When the summaries state a different number of years than Identity, quote the Identity figure: it is the one search, cards and fit flags use. Omits structured contact fields and labeled salary and visa preference lines. Professional summaries and career descriptions may contain personal details supplied in free text. Clera privately records this tool's inputs and results for usage tracking and support. |
| listPendingIntroRequests | List candidates who have expressed interest in the company's roles and are waiting for a company decision, the intro requests shown in the Review tab of the dashboard. Each item includes opportunityId, talentId, talentName, talentOneliner (summary), and roleName. opportunityId is a tool input only, pass it to requestIntro or passCandidate. Never show it to the user; refer to the candidate by name. Returns paginated results, use limit and offset for more. Clera privately records this tool's inputs and results for usage tracking and support. |
| listRecommendedCandidates | List the candidates Clera picked for your roles that are awaiting your review, the same set the Review tab of the dashboard shows minus the intro requests candidates sent themselves. Each item includes opportunityId, talentId, talentName, talentOneliner, fitHeadline (AI-generated fit summary), and roleName. opportunityId is a tool input only, pass it to requestIntro or passCandidate. Never show it to the user; refer to the candidate by name. Returns paginated results, use limit and offset for more. Clera privately records this tool's inputs and results for usage tracking and support. |
| listPassed | List candidates the company has passed on (declined) for its open roles. Use this when the company wants to see who was passed, or asks to undo a pass. Each item includes opportunityId, talentId, talentName, roleName, and passedAt. passedAt is the opportunity's latest update time and may differ from when the pass happened. opportunityId is a tool input only, pass it to undoPass to undo a pass. Never show it to the user; refer to the candidate by name. Returns paginated results, use limit and offset for more. Clera privately records this tool's inputs and results for usage tracking and support. |
| listPipeline | List the company's hiring pipeline, the same board the Pipeline page of the dashboard renders: every candidate grouped by stage, with a count per stage. Stages in order: review (awaiting the company's review), intro_requested (intro in progress), introduced (awaiting first interview), interviewing, offer, hired. Each candidate includes talentName, roleName, and for interviewing candidates interviewStage (e.g. "Technical screen (2 of 3)") and nextInterviewAt. roleCounts gives the board total per role, largest first. It is the only candidate count per role; the job tool's list command carries none. Use it for any question about how many candidates are in the pipeline, how many a role has, who is interviewing, or which stage someone is at. Counts cover the whole stage, candidates are capped by candidatesPerStage. Clera privately records this tool's inputs and results for usage tracking and support. |
| addGoodFitExample | Record a candidate the company liked as a good-fit example for a job. When a company expresses positive feedback about a candidate, add their LinkedIn to the job's good-fit list. These examples improve future candidate matching. Input (provide at least one of linkedinUrl or talentId): - jobId: Which job this good-fit example is for (resolve with the job tool's list command) - linkedinUrl: Direct LinkedIn URL. If the source text wraps it in link markup (e.g. <https://linkedin.com/in/name|Display Name>), extract just the URL - talentId: UUID of the talent, their LinkedIn URL will be resolved automatically If the URL is already in the list, returns success with a note instead of erroring. Returns a refusal if the jobId doesn't belong to this company. Clera privately records this tool's inputs and results for usage tracking and support. |
| readCompanyProfile | Read the company profile. get: reads the current company profile, the name and every editable field, plus the company notes (the memory entries Clera keeps about how this company hires), so you can see what is already filled. Run this first. Clera privately records this tool's inputs and results for usage tracking and support. |
| editCompanyProfile | Update the company profile or record notes about the company. update: writes the fields you pass. Omitted fields are left untouched. The four long-text fields (description, descriptionShort, about, culture) are written only when they are currently blank, so an existing value is never overwritten by default; every other field overwrites unconditionally. With overwrite=true it also replaces already-filled long-text fields; pass overwrite only when the user explicitly asks to replace or rewrite an existing value. update_memory: memoryUpdates. Records company-wide notes per topic key (hiring_process, company_culture, communication_preferences, compensation_patterns, deal_breakers): how they hire, what they consistently reject, how they like to be updated. Record a note the moment the contact tells you something durable, without being asked. A null value deletes the key; reuse an existing key instead of adding a near duplicate. Notes about one role go to editJob update_memory. Every note refreshes the hiring rubric Clera uses to pick candidates for this company. Always run readCompanyProfile get before update so you do not resend values that are already set. Clera privately records this tool's inputs and results for usage tracking and support. |
| readCompanyContacts | Read the company's contacts, hiring managers included. list: all contacts with ids, active flag, primary flag. Run this first to find a contact's id. get: one contact by contactId. Clera privately records this tool's inputs and results for usage tracking and support. |
| editCompanyContact | Create, change or deactivate a company contact. create: needs firstName + email; email is unique per company. Optional lastName, phone, linkedinUrl, title, calendarLink, isPrimary, shouldCc. Re-adding a removed email reactivates it. update: contactId + any fields to change. delete: contactId. Deactivates the contact (soft delete). set_primary: contactId. Makes it the company's primary contact. set_active: contactId + active. Reactivate (true) or deactivate (false). Ids come from readCompanyContacts list. calendarLink decides whose calendar the hiring manager's interview books on, so keep it correct. Clera privately records this tool's inputs and results for usage tracking and support. |
| readJob | Read the company's roles. list: optional lifecycle. Every role with its jobId, position, lifecycle, workplaceType, isComplete. Call it whenever the user names a role or asks how many jobs they have; only open roles accept intro requests. Candidate counts per role come from listPipeline. Refer to roles by position, never show the id. get: jobId. A role's full state: basic fields incl. example profiles (goodFitLinkedinUrls), sourcing brief, active requirements, interview stages, locations with ids, job memory. Read before any edit, especially before set_brief, set_stages or set_requirements. list_questions: jobId. The role's screening questions with ids, text, explanation, type, priority, optional and hidden flags. list_locations: jobId. Current locations with ids. get, list_questions and list_locations need a jobId from list. Clera privately records this tool's inputs and results for usage tracking and support. |
| editJob | Create and edit the company's roles. create: one of position (blank role), jobUrl (posting link) or jobText (pasted JD). Returns the jobId. Only when the user explicitly asks for a new role. Then run get, say which fields are missing, and hand over the getDashboardLink role_preview link. update: jobId + updates. Basic fields incl. the candidate-facing description, lifecycle (open publishes and starts matching), pay, experience, visa, workplace, hiringManagerContactId, goodFitLinkedinUrls (example profiles, full replace). Only provided fields change; matching needs employmentType, a salary bound and an experience bound. set_brief: jobId + brief. Markdown sourcing brief for Clera's matching team, never shown to candidates; full replace, null clears. set_roles: jobId + roles. 1 to 3 job-category tags for the work this hire does day to day, e.g. ["Account Executive", "AE", "Sales"] for a closing sales role. Synonyms of that category count; adjacent categories do not: a sales role never gets Business Development, Growth or Account Manager. Every tag widens candidate search, so an extra tag pulls in people from that other category. Required for matching. set_stages: jobId + stages. Ordered interview stages, full replace. Stages are matched by name, so a rename reads as a removal plus an insert. A stage that still has candidates on it cannot be removed or renamed here: that needs the dashboard, where the company picks the stage those candidates move to. Say so and hand over the getDashboardLink role_preview link instead of retrying. add_requirements: jobId + requirements. Discrete, evaluable criteria the contact stated, e.g. "must have payments experience". Appends; vague preferences go to update_memory. update_memory: jobId + memoryUpdates. Notes per topic (ideal_candidate, interview_process, team_dynamics, selling_points, urgency). Record a note the moment the contact tells you something durable about this role, without being asked. Null deletes a key; reuse keys over ne |
| sendFeedback | Send a note from the user to the Clera team through Slack, together with their name, email and company: a bug, a confusing tool, something Clera cannot do yet, or praise. Use it when the user asks to pass something on, or when they hit a problem and agree to report it; tell them what will be sent first. Include only the details needed to explain the issue. One call per distinct issue. The team reads every note; nothing comes back to relay. Clera privately records this tool's inputs and results for usage tracking and support. |
| searchExternalTalent | Search the wider talent market — people who are NOT in Clera's network and have not opted in to hearing from companies. Use searchCandidates first. That searches Clera's own pool of candidates who are open to opportunities, it is free and unlimited, and those people can be introduced to you. Only reach for this tool when Clera's pool genuinely does not cover the brief, or the user explicitly asks to look outside Clera. Costs one of 10 external searches per day for the company, so make each one count: set the filters you actually need rather than running several broad passes. Returns at most 50 people. Returns no email and no phone — this is profile data only. To get contact details for one of these people, pass their linkedinUrl to lookupContact. Call listExternalTalentFilters if you are unsure which values a filter accepts. Clera privately records this tool's inputs and results for usage tracking and support. |
| listExternalTalentFilters | List the fields the external index can list values for, and optionally the most common values of one field. Free and unlimited — it does not spend an external search. Call it when you are unsure whether a location, industry or seniority value will match anything, then use the exact values it returns. Call it with no field first: that lists the field names this tool accepts. They are index field names and are not the filter keys searchExternalTalent takes, so passing "titles" or "seniorities" here fails. Clera privately records this tool's inputs and results for usage tracking and support. |
| lookupContact | Find the email and phone number for a person, from their LinkedIn profile URL. This runs asynchronously. It returns immediately with status "pending" and a lookupId — you MUST then call checkContactLookup with that lookupId to get the result. Wait roughly 30 seconds before the first check. Do not tell the user you have their details until a check comes back "completed". Costs one of 25 lookups per day for the company, and every call counts, including repeats of the same person. If the URL belongs to someone already in Clera's network whom your company has not engaged, this refuses and points you at requestIntro instead — they hear it from Clera first, which converts far better than a cold email. Clera privately records this tool's inputs and results for usage tracking and support. |
| checkContactLookup | Read the result of a lookupContact call, using the lookupId it returned. Free — checking does not spend another lookup. If status is still "pending", wait about 30 seconds and check once more. Clera privately records this tool's inputs and results for usage tracking and support. |
| searchCleraRoles | Search the open roles at startups Clera works with. Every result is a role Clera can introduce the candidate to, so this is the first search to run whenever they want roles, a company or a stack: run it before searchJobs, and go to the external board only when this search comes up short or the candidate asks for it. Keep query to keywords — a title, a stack, a company — not a sentence; leave it empty to browse newest first. arrangement is remote, hybrid or on-site and widens to compatible roles the way Clera's own job matching does: hybrid also returns remote roles, on-site also returns hybrid ones, and each row's arrangement says what the role actually is. cities are exact, as the candidate names them; minSalary keeps roles with no salary on file, so an unknown salary is a question to ask, not a miss. Ranking follows the candidate's role affinity, the roles they hold and adjacent ones, and roles they declined stay hidden (undoMatchDecision brings one back). status is null until the role is one of the candidate's opportunities; otherwise it is the status listMatches shows, and introRequested true means the company already asked for them. likeMatch with the row's jobId, position and companyName tells Clera they want it; nothing goes to the company at that point. readMatch has the full description once the role is a match. Never show jobId. Clera privately records this tool's inputs and results for usage tracking and support. |
| searchJobs | Search the wide external job board: the second option, after searchCleraRoles. Roles at startups Clera works with live in searchCleraRoles, where every result is an intro Clera can make; run that first. This board is everything else: Clera has no relationship with most of these employers, every listing carries the employer's own application link and the candidate applies there themselves. Clera does not send the application for them. Come here when the Clera search came up short or the candidate asks for the wider market, and say which board a result is from. Keep query to keywords — a title, a stack, a company — not a sentence. Filters are exact values: arrangement is remote, hybrid or on-site; experienceLevel is 0-2, 2-5, 5-10 or 10+; employmentTypes are FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY or INTERN. Salary is missing on most listings. minSalary keeps those unknown-salary roles in by default; pass excludeUnknownSalary to drop them, and expect a much smaller result set. Use readJobListing for the full description of one result, and saveJob to bookmark one. Clera privately records this tool's inputs and results for usage tracking and support. |
| readJobListing | Read one job board listing in full, by the jobId from searchJobs or listSavedJobs. Returns the description, requirements, benefits and the company block, plus applyUrl — the employer's own application page, which is where the application actually happens. Clera does not submit it. Once the candidate applies, trackApplication with the same jobId puts it on their application tracker. A listing that has closed still comes back, with isLive false. Say so plainly rather than sending someone to a dead posting. Clera privately records this tool's inputs and results for usage tracking and support. |
| saveJob | Bookmark a job board listing so it's there later. Saving is private. It does not tell the company anything, it does not start a Clera intro, and it does not apply — the application still happens on the employer's own page. Pass position and companyName exactly as the search result gave them. They are checked against the record, so a mismatch is refused rather than saving the wrong role. Saving the same listing twice is fine and changes nothing. Once the candidate applies, trackApplication with the same jobId puts it on their application tracker. Clera privately records this tool's inputs and results for usage tracking and support. |
| listSavedJobs | List the job board listings saved so far, newest first. Listings that have closed since they were saved are still here, with isLive false — they are kept on purpose rather than disappearing. Point them out and offer to search for something close instead. None of these have been applied to by Clera. applyUrl is the employer's own page. Once the candidate applies, trackApplication with the same jobId puts it on their application tracker. Clera privately records this tool's inputs and results for usage tracking and support. |
| unsaveJob | Remove a job board listing from the saved list. Removing one that was never saved returns not_saved and changes nothing — that is not an error worth apologising for. This only drops the bookmark. It does not withdraw an application, because Clera never sent one. Clera privately records this tool's inputs and results for usage tracking and support. |
| applyToJob | Fill in the employer's own application form for the candidate, from their Clera profile and primary resume. Returns { runId } straight away; the form takes about 10-30 seconds, so call getApplicationRun with that runId next. mode dry_run (default) fills everything and stops before the submit button, so the candidate can see what would be sent. mode submit sends a real application to the employer: use it only when the candidate has said to apply to this specific role. They are asked to confirm before anything is sent, and it only sends when every required field is filled; otherwise the run comes back needing input and nothing is sent. If a run came back needing input, ask the candidate those exact questions and start again with answers set to { "<the question or its key>": "<their words>" }. Never make up an answer. Pass position and companyName exactly as searchJobs or readJobListing gave them; a mismatch is refused rather than applying to the wrong role. Clera privately records this tool's inputs and results for usage tracking and support. |
| getApplicationRun | See how an applyToJob run went. state is running, finished or crashed. When finished, outcome is ready_to_submit (dry run, every field filled, nothing sent), submitted (sent and confirmed by the employer's site), submit_unconfirmed (submit clicked but no confirmation; do not resend), needs_input (nothing sent; ask the candidate each question in needsInput, then call applyToJob again with answers), blocked (a CAPTCHA or login wall, see blockers) or failed (no form reachable). A profile_gap question is worth saving to the candidate's profile with editPreferences too. Clera privately records this tool's inputs and results for usage tracking and support. |
| listApplications | List the jobs the candidate applied to or plans to apply to, from the external job board, a posting link or typed by hand: their application tracker, newest first, with each one's stage (draft, applied, interview, offer, rejected), notes and links to any tailored resume or cover letter. The tracker is the candidate's own record of jobs they are applying to anywhere, not Clera intros. Moving a card never contacts the company. Document links expire after an hour; list again for fresh ones. Clera privately records this tool's inputs and results for usage tracking and support. |
| trackApplication | Add a job to the candidate's application tracker as a draft. Give exactly one of: - jobUrl: a public posting link (Greenhouse, Lever, Ashby, company careers page…). Clera reads the page for the title, company and description, which takes up to half a minute. - jobId: an external job board listing's jobId from searchJobs, readJobListing or listSavedJobs, e.g. a saved job the candidate just applied to. - position and companyName, typed by hand, with jobDescription if the candidate pasted it. A link that is already on the tracker returns the existing entry with created false. The tracker is the candidate's own record of jobs they are applying to anywhere, not Clera intros. Moving a card never contacts the company. Clera privately records this tool's inputs and results for usage tracking and support. |
| updateApplication | Move a tracked application to another stage (draft, applied, interview, offer, rejected) or edit its notes, title, company, link or job description. Only the fields given change; pass null to clear notes, jobUrl or jobDescription. The tracker is the candidate's own record of jobs they are applying to anywhere, not Clera intros. Moving a card never contacts the company. Clera privately records this tool's inputs and results for usage tracking and support. |
| deleteApplication | Remove a job from the candidate's application tracker, with its notes and document links. It does not withdraw anything with the company. Confirm with the candidate before calling. Clera privately records this tool's inputs and results for usage tracking and support. |
| generateApplicationDocuments | Write a cover letter and/or a resume tailored to one tracked application, from its job description, and attach the PDFs to it. Each takes up to a minute. The application needs a job description; add one with updateApplication first if it has none. Only facts already on the candidate's Clera resume are used. There is a daily limit per document kind. Clera privately records this tool's inputs and results for usage tracking and support. |
| getTalentDashboardLink | Returns the exact Clera dashboard URL for one section of the candidate's own dashboard. One link per request, the one that answers the question; "my dashboard" means home. Commands: list: every link, for when you are unsure which command fits. For you only; never send the menu or several links to the user. home: overview with profile setup and the top matches. matches: the roles Clera matched, with like, pass and the role questions. pipeline: every opportunity by stage, including interviews. applications: the candidate's own application tracker board (draft, applied, interview, offer, rejected), with tailored resumes and cover letters per job. Only open for some accounts while in beta. jobs: the wide external job board (searchJobs works on the same data). interview_prep: the interview preparation guide. resume: the resume builder with live preview, plus upload, replace or pick the primary resume. Uploads only happen here. preferences: salary, location, work environment, visa, roles and blocked companies. referral: the referral link, invited friends and earnings. worth: the salary calculator. roast: the profile roast, which needs a PDF upload. perks: partner perks and discounts. interview: interview invitations and feedback. account: login email, contact channels and account deletion. This tool is the only source of Clera dashboard links. Never construct, guess, shorten or modify a getclera.com URL; copy the URL from this tool's output verbatim. Clera privately records this tool's inputs and results for usage tracking and support. |
| listMatches | The candidate's Matches page: the roles Clera matched them to, in the order the page shows them, plus open roles that pass their preferences but nobody at Clera has evaluated yet (kind open_role, no whyMatch). Rows with introRequested true are companies that asked to talk to this candidate; they come first. status questions means the candidate liked the role and the company still needs answers to its questions — answerRoleQuestion handles those. Roles already passed on, closed or marked no match are not here; listMyPipeline has everything. Act on a row with likeMatch or declineMatch (jobId, position and companyName from the row). Never show opportunityId or jobId. Clera privately records this tool's inputs and results for usage tracking and support. |
| listMyPipeline | The candidate's Pipeline page: every opportunity Clera has for them, in every state, with the interview date where one is booked. status: new (not reacted yet), questions (liked, company questions still open), interested (liked, Clera is working on it), process (submitted to the company or interviewing), declined (candidate passed), withdrawn, no_match (Clera or the company said no), closed (the role closed). undoMatchDecision reverses a declined row. Never show opportunityId or jobId. Jobs the candidate applied to outside Clera are not here; they live on the application tracker (listApplications). Clera privately records this tool's inputs and results for usage tracking and support. |
| readMatch | One of the candidate's matches in full, by the opportunityId from listMatches or listMyPipeline: the role description, tech stack, experience band, visa line, interview stages, the company block, and every role question with its current answer. Use it before likeMatch or declineMatch when the row alone is not enough, and to help draft answers for answerRoleQuestion. Refuses an opportunityId that is not the candidate's own. Open roles from listMatches (kind open_role) have no opportunityId yet; readJobListing does not cover them either, so describe them from the row. Clera privately records this tool's inputs and results for usage tracking and support. |
| likeMatch | Tell Clera the candidate wants this role, the same as the like button on a Matches card. Works on a match and on an open_role row alike. Nothing is sent to the company at this point: Clera reviews the like, may ask the candidate to answer the role's questions (listMatches shows them as status questions), and makes the introduction when it fits. Say that plainly rather than "applied". Pass position and companyName exactly as the row gave them; a mismatch is refused rather than liking the wrong role. Liking twice changes nothing. The dashboard can take up to a minute to show the change. Clera privately records this tool's inputs and results for usage tracking and support. |
| declineMatch | Pass on a role, the same as the pass button on a Matches card. The role leaves the Matches list and Clera stops working on it; undoMatchDecision brings it back. A reason is required and should name the thing that is wrong. Pass position and companyName exactly as the row gave them; a mismatch is refused rather than passing on the wrong role. Clera privately records this tool's inputs and results for usage tracking and support. |
| undoMatchDecision | Reset a like or a pass so the role is back in Matches as new, the same as undo on the dashboard. Take the opportunityId from listMyPipeline (a declined row) or listMatches. Only the candidate's own decision is reset: a role Clera or the company closed (no_match, closed) stays that way, and a role already in process cannot be pulled back here; withdrawing from a process is a dashboard action. Clera privately records this tool's inputs and results for usage tracking and support. |
| answerRoleQuestion | Save the candidate's answer to one of a company's role questions, from listMatches or readMatch. The questions are the company's own screening questions; Clera passes the submitted answers on with the introduction. Draft first and read the answer back before submitting: submit true marks it final. Answer in the candidate's own words and facts, never invented ones. Refuses a questionId that is not on one of the candidate's matches. Clera privately records this tool's inputs and results for usage tracking and support. |
| listInterviewRequests | The candidate's interview invitations: pending ones waiting for a yes or no, and the history of accepted and declined ones. acceptInterview and declineInterview act on a pending row by its interviewProgressId. Never show the id. Clera privately records this tool's inputs and results for usage tracking and support. |
| acceptInterview | Accept a pending interview invitation from listInterviewRequests. Clera tells the company and follows up with scheduling; the candidate does not need to email anyone. Confirm the role and stage with the candidate first; this is the answer the company gets. Clera privately records this tool's inputs and results for usage tracking and support. |
| declineInterview | Decline a pending interview invitation from listInterviewRequests. The company is told; give the reason the candidate wants passed on, kept short and plain. Confirm with the candidate first, this cannot be undone here. Clera privately records this tool's inputs and results for usage tracking and support. |
| readPreferences | The candidate's job preferences as the Preferences page holds them: salary range and how much it matters, work environment, relocation, roles, job types, industries, company size and funding stage, visa needs, availability, blocked companies, skills and whether they are open to opportunities. Matching runs on these, so an unset or stale field is the first thing to fix when matches look off. Keys match editPreferences one to one. memory lists the notes Clera keeps about the candidate (motivations, constraints, contact habits); editPreferences memory changes them. Locations (cities) are shown on the Preferences page only; getTalentDashboardLink preferences. Clera privately records this tool's inputs and results for usage tracking and support. |
| editPreferences | Change the candidate's job preferences and profile data, the same fields readPreferences returns. Send only the fields to change; the rest stay as they are. null clears the salary bounds and the importance fields; every other field is replaced, never cleared. A list field replaces the whole list, so send the complete set; an empty list changes nothing. Companies to block go in add_blocked_companies and remove_blocked_companies by name. Read the current values with readPreferences first and confirm the change with the candidate before writing; matching reruns on the new values. memory adds or clears the notes Clera keeps about the candidate, five at most. Preferred cities, contact details and resumes are edited on the dashboard, not here. Clera privately records this tool's inputs and results for usage tracking and support. |
| getProfileStrength | The profile strength score the Home page shows: 0 to 100, a tier, and the next actions ranked by how many points each adds. A stronger profile matches better and gets introduced more, so the top action is the practical answer to "how do I get more matches". Most actions map to editPreferences or a resume upload on the dashboard. Clera privately records this tool's inputs and results for usage tracking and support. |
| listResumes | The candidate's uploaded resumes, newest first, with which one is primary (the one Clera sends with introductions), plus the AI resume feedback if it has been generated: a score out of 100, a summary, strengths and concrete improvements. Uploading a new resume only happens on the dashboard (getTalentDashboardLink resume). setPrimaryResume, deleteResume and refreshResumeFeedback act on what is here. Clera privately records this tool's inputs and results for usage tracking and support. |
| setPrimaryResume | Make one of the candidate's resumes the primary one, the version Clera sends with every introduction from now on. Take the resumeId from listResumes; another candidate's id is refused. Clera privately records this tool's inputs and results for usage tracking and support. |
| deleteResume | Delete one of the candidate's resumes for good. The primary resume and the only resume cannot be deleted; make another one primary first. Confirm with the candidate before calling; there is no undo. Clera privately records this tool's inputs and results for usage tracking and support. |
| refreshResumeFeedback | Generate fresh AI feedback on the candidate's primary resume. It runs in the background for about a minute; call listResumes afterwards to read it. Needs at least one resume on file. Clera privately records this tool's inputs and results for usage tracking and support. |
| readResumeDraft | The candidate's resume-builder draft: profile, experience with bullets, education, skills, languages, links and the design settings. This is the structured resume the candidate edits on the dashboard and turns into a PDF; it is separate from the uploaded resumes in listResumes. Empty until seedResumeDraft or editResumeDraft creates it. Clera privately records this tool's inputs and results for usage tracking and support. |
| editResumeDraft | Replaces one section of the candidate's resume draft with the value sent, and creates the draft if none exists. Sections: profile, work (roles with plain-text bullets, newest first, dates as YYYY-MM, empty endDate means present), education, skills ({name, group}), languages ({name, level}), links ({type, label, url}), design (templateId harvard_classic | ats_clean | executive_serif, accentColor hex, fontSize, sectionOrder, templateOptions). Read the draft first and send the whole section back with your changes; a section is replaced, never merged, so anything you leave out of the value is gone. This is how you rewrite bullets or a summary for the candidate: propose the text, get a yes, then send it here. Clera privately records this tool's inputs and results for usage tracking and support. |