Workopia
by HERAAI PTY LLC (Community)
Description
Workopia AI brings the full job search experience into ChatGPT — no extra tabs, no separate sign-ups. Key Highlights • Employer-direct, real-time jobs Listings are pulled live from company career pages and Applicant Tracking Systems (ATS), so you see roles as soon as they’re posted — not recycled from third-party job boards. • Must-have vs. nice-to-have, at a glance Each role is pre-tagged to help you scan quickly: required skills are clearly highlighted, while additional “nice-to-have” criteria are separated out. • Tailor your resume inline Open any job and click *Tailor* to instantly adapt your resume. A live widget highlights missing skills and lets you add supporting evidence in real time. Export an ATS-friendly PDF in one click. • Cover letter + apply Generate a role-specific cover letter from the same chat, download it as a PDF, and apply directly via the employer’s official posting. Search → Read → Tailor → Cover Letter → Apply All in one conversation, end to end.
Capabilities
No special capabilities listed
AI Agent Discovery
Workopia is indexed by Tedix as a structured productivity listing for AI assistants, search crawlers, and users comparing agent-ready apps.
- Workopia is categorized as Productivity.
- Developer: HERAAI PTY LLC.
- Connector type: AI-Powered App.
- Current connector status: Connected.
- Observed distribution channels: chatgpt.
- Available regions: US, FR, GB, ES, KR, IN.
Use this page to understand whether Workopia is relevant for productivity workflows in AI assistants.
For MCP discovery, this listing helps crawlers connect Workopia to tool, resource, prompt, and server-health signals instead of treating it as a generic directory entry.
The canonical Tedix directory URL is https://tedix.dev/apps/workopia/.
Crawlable Profile
Source and availability
Tedix identifies Workopia from Upstream Mcp tool source; Store sources: ChatGPT app store; Distribution: Ecosystem Directory. Availability is reported for US, FR, GB, ES, KR, IN.
- ChatGPT app store Auth required · RELEASED · US, FR, GB, ES, KR, IN
Auth, tools, and actions
Authentication: Requires Login. No special capability flags are currently listed. Current MCP inventory reports 7 tools, 10 resources, and 0 prompts.
- career_tool · Read-only action
Career transition / planning — same as career_transition_advice. Pass fields in career_transition_advice or career or top-level.
- cover_letter_tool · App action
Write a cover letter for a SPECIFIC job. Output is plain-chat markdown: the full cover letter body (starts with 'Dear Hiring Manager,' and ends at the last argument paragraph — no signature or placeholders) followed by a `[Download PDF](url)` link for the PDF letterhead version. No widget — the markdown itself is the user-facing answer. Use this tool whenever the user asks for a cover letter for a specific job: 'write me a cover letter for #1', 'cover letter for the Morgan Stanley role', 'draft an application letter for this JD: <text>'. Resolving job_id from user reference (same rules as tailor_resume_tool / job_detail_tool): prior search/refine result's structuredContent.items[N-1].card.id; company name substring match on items[].card.company; role/title phrase on items[].card.title. Supply ONE of job_id (preferred — server fetches the full JD from Mongo) OR job_description (pasted JD text). Do NOT pass both. Also pass the user's resume via resume_text / resume_content / user_profile. CONTACT CARRY-OVER (IMPORTANT): if the user already shared a resume earlier in this session (e.g. when tailoring a resume), reuse that resume's contact block — extract name, phone, email, location, and LinkedIn from the prior resume_text / user_profile and pass them in user_profile for this call. The PDF letterhead renders exactly the fields you pass; anything missing shows as 'Your Phone' / 'Your Location' placeholders. Never drop phone when the prior resume had one. OUTPUT BEHAVIOR: content[0].text is already the complete user-ready markdown — echo it VERBATIM as your final reply. Do NOT rewrite the body, do NOT replace the Download link with a placeholder, do NOT prepend your own intro. If the user is not signed in, the PDF link is omitted and the body markdown stands alone with a brief 'Sign in to download as PDF' note.
- dashboard_tool · Read-only action
Show the signed-in user's Workopia dashboard. Requires OAuth. Default action is list; pass optional status_filter (all | saved | tailored | applied). Use this tool whenever the user asks to recall what they have done so far with Workopia: 'remind me what I have done so far', 'what jobs have I saved / applied to / tailored', 'show my saved jobs', 'my applications', 'my bookmarks', 'my job list', 'what did I do last time', 'where did I leave off'. The dashboard widget renders two sections: (1) Your saved jobs — each row shows RESUME / COVER LETTER / APPLY buttons. RESUME and COVER LETTER only appear when the user has already tailored a resume or generated a cover letter for that specific job (via tailor_resume_tool / cover_letter_tool); APPLY links directly to the employer job URL. (2) Latest resume — a single most-recent resume (generated via resume_tool, or fallback to the latest tailored resume if none was generated).
- job_detail_tool · Read-only action
Render the full job-detail card for a specific job the user asks about. Use this whenever the user references a particular job from a prior search result — by number (#1, '1', 'first', '第一', 'the 3rd one', 'job 3'), by company name (partial or full, e.g. 'Morgan Stanley', 'Morstan'), by role/title phrase ('the analyst role', 'the credit risk one'), or by any 'show me this job' / 'tell me more about X' / 'view this role' style request. Resolving job_id from user reference: look at the most recent prior search/refine result's structuredContent.items (each item's .card has id, title, company). (a) numeric/ordinal → items[N-1].card.id; (b) company name → case-insensitive substring match on items[].card.company, first match wins; (c) role/title phrase → case-insensitive substring match on items[].card.title. Required: job_id. The tool returns a job-detail widget card that includes title, company, location, salary, skills, description, and the apply link — this card is the complete response, please let it stand on its own and follow it only with a single brief next-step hint (e.g. 'Want to save it, find similar roles, or ask about the company?').
- job_tool · App action
Find, refine, or save job listings. Default action is search; use refine when the user asks for more matches or gives feedback on a prior result set; use save to bookmark a job (requires OAuth). CONTINUATION PROTOCOL (critical for 'show me more' / 'next batch' / 'more like these' / 'another set' / '换一批' / '再给我一些'): call action=refine with (a) refine_recommendations.exclude_ids = the full array of every job_id you showed in the most recent search/refine result — collect from prior tool output's structuredContent.items[].card.id (or meta.returned_job_ids if present); AND (b) refine_recommendations.session_id = prior response's top-level session_id (if present, else the one from meta.session_id). If you skip exclude_ids, the user will see the same jobs again — that is a failure. Always pass exclude_ids when continuing from a prior result. The handler layers exclude_ids with server-side memory, so passing even a partial list still helps. For detail requests (user asks about a specific job from the list, e.g. 'details for #1', 'show me this job', 'tell me more about <company>'), DO NOT call this tool — call job_detail_tool instead. That separate tool binds to the job-detail widget card so the full job card renders in chat. OUTPUT BEHAVIOR: this tool renders the job-list carousel widget. The widget IS the user-facing answer — all fields (title, company, location, salary, skills, description) are already in each card. Each card shows a #N badge in the top-right matching its position in structuredContent.items (1-based). Do NOT restate, summarize, or re-render the same job fields in text next to the widget. REQUIRED follow-up: after the widget, output EXACTLY these two sentences as two parallel questions (same pattern for action=search and action=refine): Sentence 1 — 'Would you like to see full details on any of these? Reply with the number (#1), the company name, or the role title.' Sentence 2 — 'Or would you like to refine the list — what should change (work mode, level, salary, sector)?' These two sentences must be separate and parallel; do NOT merge them into one 'detail ... or refine' clause (that buries the detail CTA). Both questions must be asked every time after a search or refine result. No other narration. When the user replies referring to a specific job from the list, map it to a job_id and call job_detail_tool immediately. Matching rules (use these flexibly — the user rarely types '#N' literally): (a) any numeric or ordinal reference ('#1', '1', 'first', 'the 1st', 'top one', '第一', '第1个', 'job 3', 'the third') → items[N-1].card.id; (b) a company name, partial or full ('Morgan Stanley', 'Morstan', 'Capital One') → case-insensitive substring match on items[].card.company, pick the first match; (c) a role/title phrase ('the analyst role', 'the credit risk one') → case-insensitive substring match on items[].card.title. If multiple items match, prefer the earliest in items[]. Only if no reasonable match exists, ask a one-line clarifying question. For save, pass job_id + optional job_title/company/job_url in save_job. Put search fields in search_jobs or parameters; refine in refine_recommendations; save in save_job.
- resume_tool · App action
Use for resume actions that do NOT involve tailoring to a specific job. Five actions: improve (default) | generate | boost_summary | boost_highlights | polish_summary. For tailoring a resume to a SPECIFIC job (with the tailor-resume widget — missing-skills bar, inline edit, Download PDF), call `tailor_resume_tool` directly; it is a separate entry tool. action=improve (DEFAULT): proofread/optimize resume content — generates a stronger Professional Summary and rewrites each employment description into impact bullets. Returns markdown text only — does NOT produce a PDF. Use when the user says 'improve my resume', 'proofread my resume', 'optimize my resume', 'make it stronger', '帮我改简历'. After showing the optimized text, offer 'If you'd like a polished PDF, say generate and I will render it.' — do NOT auto-call generate. action=generate: MANDATORY when the user asks for generate/create resume, resume template, styled/formatted resume, downloadable resume, PDF resume, or preview/shareable resume. Two sub-modes for generate: (i) User HAS a resume — accept resume_text (plain text or JSON Resume as string) and/or json_resume (jsonresume.org object with basics/work/education/skills). Generate immediately. (ii) User is building from SCRATCH (no resume, says 'help me create a resume', 'make me a resume', '帮我做简历') — do NOT call generate immediately. First interview the user CONVERSATIONALLY in this order: basic info (name, email, phone, location, desired title) → most recent work (title, company, start/end dates, 3-5 achievement bullets — offer action=boost_summary to polish each bullet list) → prior work (repeat) → education (degree, school, dates) → skills (top 6-10) → languages (optional). After collecting, offer action=boost_highlights to draft a 2-sentence Career Highlights/Professional Summary from the collected data. Only then assemble a json_resume object { basics:{name,email,phone,location:{city,country},label,summary}, work:[{position,name,startDate,endDate,highlights:[]}], education:[{institution,studyType,area,startDate,endDate}], skills:[{name}], languages:[{language,fluency}] } and call action=generate with json_resume. DO NOT fabricate details the user did not provide — if a section is truly empty, omit it rather than invent. action=boost_summary: improve ONE work or education description paragraph into bullet points. Input: summary (string). Output: content[0].text is the polished bullets; structuredContent.boosted_summary is the same text — use that text when composing the user's json_resume.work[].highlights or json_resume.education[].courses. action=boost_highlights: generate a 2-sentence Career Highlights paragraph from the user's collected resume context. Input: resumeData (object with summary, employment:[{position,company,description}], education:[{degree,school,summary}], skills), optional currentHighlights. Output: content[0].text is the paragraph; put it into json_resume.basics.summary before calling action=generate. Optional template_key for generate (Workopia registry key; omit defaults to Workopia Classic / workopia_classic). Legacy alias hera_classic accepted. OUTPUT BEHAVIOR for action=generate — HARD RULE: the tool's returned content[0].text is already a complete, user-ready message: one sentence ending with a markdown `[Download PDF](https://...)` link, plus an optional second sentence about other styles. Echo this text VERBATIM as your final reply. Do NOT rewrite it, do NOT prepend your own sentence, do NOT replace the link with '👉', 'here', 'click to download', an ellipsis, or any other placeholder that lacks the actual URL — the user cannot click placeholders and will not receive the PDF. The exact download_url is also in structuredContent.download_url; if for any reason you must compose your own message, embed that exact URL as a markdown link. NEVER invent URLs, NEVER return raw PDF/HTML/base64, NEVER strip the link. Treat this as a non-negotiable post-call template.
- tailor_resume_tool · App action
Tailor a user's resume to a SPECIFIC job. Renders the tailor-resume widget: per-skill ✓/✗ with inline evidence input on ✓, missing-skills bar, and a Download PDF link emitted in the chat text. Use this tool whenever the user references a specific job to tailor for: 'tailor for #1', 'tailor for the first one', 'for Morgan Stanley', 'tailor my resume for this role: <JD>'. Resolving job_id from user reference (same rules as job_detail_tool): look at the most recent prior search/refine result's structuredContent.items (each item's .card has id, title, company). (a) numeric/ordinal → items[N-1].card.id; (b) company name → case-insensitive substring match on items[].card.company, first match wins; (c) role/title phrase → case-insensitive substring match on items[].card.title. Supply ONE of job_id (preferred — server fetches full JD from Mongo) OR job_description (when the user pastes the JD directly). Do NOT pass both. Also pass the user's resume via resume_text / resume_content / user_profile. OUTPUT BEHAVIOR: the widget IS the canonical answer — the tailored resume and missing-skills bar render inside it (no Download button in the widget; PDF export happens through chat). Echo content[0].text verbatim; do NOT restate the resume fields inside it. HARD RULE — PDF EXPORT PROMPT: content[0].text always ends with a sentence inviting the user to say 'download' to export the PDF (e.g. 'Ready to export? Say "download" and I'll render your tailored PDF.'). NEVER strip, rewrite, or shorten this trailing line — it is how the user discovers the PDF export path. If you drop it, the user will not know they can ask for a PDF. Treat this as a non-negotiable post-call template. For general 'improve my resume' (no specific job, no JD), do NOT call this tool — fall back to conversational coaching.
Verification freshness
- Catalog synced 1d ago (June 5, 2026)
- Connector checked May 30, 2026
- MCP scanned May 30, 2026
- Website enriched May 28, 2026
- Directory updated 1d ago (June 5, 2026)
Alternatives and related apps
Comparable apps in Productivity include AI Voice Generator, AI Wisebase, AWS Marketplace, AccurateScribe.ai – Transcribe.
Publisher Intelligence
Insights and recommendations for app publishers. See how your app performs and how to improve discoverability.
Server Status Workopia AI (mcp-app) v2.0.0
https://workopia.io/api/mcp-app Last checked: May 30, 2026
Technical Details
Tools(7)
Showing 7 of 7 tools
| Tool | Description | Flags | Test | Last Tested | |
|---|---|---|---|---|---|
career_tool | Career transition / planning — same as career_transition_advice. Pass fields in career_transition_advice or career or top-level. | read-only | 100%Latency 924ms | May 29, 2026 | |
cover_letter_tool | Write a cover letter for a SPECIFIC job. Output is plain-chat markdown: the full cover letter body (starts with 'Dear Hiring Manager,' and ends at the last argument paragraph — no signature or placeholders) followed by a `[Download PDF](url)` link for the PDF letterhead version. No widget — the markdown itself is the user-facing answer. Use this tool whenever the user asks for a cover letter for a specific job: 'write me a cover letter for #1', 'cover letter for the Morgan Stanley role', 'draft an application letter for this JD: <text>'. Resolving job_id from user reference (same rules as tailor_resume_tool / job_detail_tool): prior search/refine result's structuredContent.items[N-1].card.id; company name substring match on items[].card.company; role/title phrase on items[].card.title. Supply ONE of job_id (preferred — server fetches the full JD from Mongo) OR job_description (pasted JD text). Do NOT pass both. Also pass the user's resume via resume_text / resume_content / user_profile. CONTACT CARRY-OVER (IMPORTANT): if the user already shared a resume earlier in this session (e.g. when tailoring a resume), reuse that resume's contact block — extract name, phone, email, location, and LinkedIn from the prior resume_text / user_profile and pass them in user_profile for this call. The PDF letterhead renders exactly the fields you pass; anything missing shows as 'Your Phone' / 'Your Location' placeholders. Never drop phone when the prior resume had one. OUTPUT BEHAVIOR: content[0].text is already the complete user-ready markdown — echo it VERBATIM as your final reply. Do NOT rewrite the body, do NOT replace the Download link with a placeholder, do NOT prepend your own intro. If the user is not signed in, the PDF link is omitted and the body markdown stands alone with a brief 'Sign in to download as PDF' note. | — | 100%Latency 2.1s | May 29, 2026 | |
dashboard_tool | Show the signed-in user's Workopia dashboard. Requires OAuth. Default action is list; pass optional status_filter (all | saved | tailored | applied). Use this tool whenever the user asks to recall what they have done so far with Workopia: 'remind me what I have done so far', 'what jobs have I saved / applied to / tailored', 'show my saved jobs', 'my applications', 'my bookmarks', 'my job list', 'what did I do last time', 'where did I leave off'. The dashboard widget renders two sections: (1) Your saved jobs — each row shows RESUME / COVER LETTER / APPLY buttons. RESUME and COVER LETTER only appear when the user has already tailored a resume or generated a cover letter for that specific job (via tailor_resume_tool / cover_letter_tool); APPLY links directly to the employer job URL. (2) Latest resume — a single most-recent resume (generated via resume_tool, or fallback to the latest tailored resume if none was generated). | read-only | 0%Latency 2.3s | May 30, 2026 | |
job_detail_tool | Render the full job-detail card for a specific job the user asks about. Use this whenever the user references a particular job from a prior search result — by number (#1, '1', 'first', '第一', 'the 3rd one', 'job 3'), by company name (partial or full, e.g. 'Morgan Stanley', 'Morstan'), by role/title phrase ('the analyst role', 'the credit risk one'), or by any 'show me this job' / 'tell me more about X' / 'view this role' style request. Resolving job_id from user reference: look at the most recent prior search/refine result's structuredContent.items (each item's .card has id, title, company). (a) numeric/ordinal → items[N-1].card.id; (b) company name → case-insensitive substring match on items[].card.company, first match wins; (c) role/title phrase → case-insensitive substring match on items[].card.title. Required: job_id. The tool returns a job-detail widget card that includes title, company, location, salary, skills, description, and the apply link — this card is the complete response, please let it stand on its own and follow it only with a single brief next-step hint (e.g. 'Want to save it, find similar roles, or ask about the company?'). | read-only | 100%Latency 345ms | May 29, 2026 | |
job_tool | Find, refine, or save job listings. Default action is search; use refine when the user asks for more matches or gives feedback on a prior result set; use save to bookmark a job (requires OAuth). CONTINUATION PROTOCOL (critical for 'show me more' / 'next batch' / 'more like these' / 'another set' / '换一批' / '再给我一些'): call action=refine with (a) refine_recommendations.exclude_ids = the full array of every job_id you showed in the most recent search/refine result — collect from prior tool output's structuredContent.items[].card.id (or meta.returned_job_ids if present); AND (b) refine_recommendations.session_id = prior response's top-level session_id (if present, else the one from meta.session_id). If you skip exclude_ids, the user will see the same jobs again — that is a failure. Always pass exclude_ids when continuing from a prior result. The handler layers exclude_ids with server-side memory, so passing even a partial list still helps. For detail requests (user asks about a specific job from the list, e.g. 'details for #1', 'show me this job', 'tell me more about <company>'), DO NOT call this tool — call job_detail_tool instead. That separate tool binds to the job-detail widget card so the full job card renders in chat. OUTPUT BEHAVIOR: this tool renders the job-list carousel widget. The widget IS the user-facing answer — all fields (title, company, location, salary, skills, description) are already in each card. Each card shows a #N badge in the top-right matching its position in structuredContent.items (1-based). Do NOT restate, summarize, or re-render the same job fields in text next to the widget. REQUIRED follow-up: after the widget, output EXACTLY these two sentences as two parallel questions (same pattern for action=search and action=refine): Sentence 1 — 'Would you like to see full details on any of these? Reply with the number (#1), the company name, or the role title.' Sentence 2 — 'Or would you like to refine the list — what should change (work mode, level, salary, sector)?' These two sentences must be separate and parallel; do NOT merge them into one 'detail ... or refine' clause (that buries the detail CTA). Both questions must be asked every time after a search or refine result. No other narration. When the user replies referring to a specific job from the list, map it to a job_id and call job_detail_tool immediately. Matching rules (use these flexibly — the user rarely types '#N' literally): (a) any numeric or ordinal reference ('#1', '1', 'first', 'the 1st', 'top one', '第一', '第1个', 'job 3', 'the third') → items[N-1].card.id; (b) a company name, partial or full ('Morgan Stanley', 'Morstan', 'Capital One') → case-insensitive substring match on items[].card.company, pick the first match; (c) a role/title phrase ('the analyst role', 'the credit risk one') → case-insensitive substring match on items[].card.title. If multiple items match, prefer the earliest in items[]. Only if no reasonable match exists, ask a one-line clarifying question. For save, pass job_id + optional job_title/company/job_url in save_job. Put search fields in search_jobs or parameters; refine in refine_recommendations; save in save_job. | — | 100%Latency 86ms | May 29, 2026 | |
resume_tool | Use for resume actions that do NOT involve tailoring to a specific job. Five actions: improve (default) | generate | boost_summary | boost_highlights | polish_summary. For tailoring a resume to a SPECIFIC job (with the tailor-resume widget — missing-skills bar, inline edit, Download PDF), call `tailor_resume_tool` directly; it is a separate entry tool. action=improve (DEFAULT): proofread/optimize resume content — generates a stronger Professional Summary and rewrites each employment description into impact bullets. Returns markdown text only — does NOT produce a PDF. Use when the user says 'improve my resume', 'proofread my resume', 'optimize my resume', 'make it stronger', '帮我改简历'. After showing the optimized text, offer 'If you'd like a polished PDF, say generate and I will render it.' — do NOT auto-call generate. action=generate: MANDATORY when the user asks for generate/create resume, resume template, styled/formatted resume, downloadable resume, PDF resume, or preview/shareable resume. Two sub-modes for generate: (i) User HAS a resume — accept resume_text (plain text or JSON Resume as string) and/or json_resume (jsonresume.org object with basics/work/education/skills). Generate immediately. (ii) User is building from SCRATCH (no resume, says 'help me create a resume', 'make me a resume', '帮我做简历') — do NOT call generate immediately. First interview the user CONVERSATIONALLY in this order: basic info (name, email, phone, location, desired title) → most recent work (title, company, start/end dates, 3-5 achievement bullets — offer action=boost_summary to polish each bullet list) → prior work (repeat) → education (degree, school, dates) → skills (top 6-10) → languages (optional). After collecting, offer action=boost_highlights to draft a 2-sentence Career Highlights/Professional Summary from the collected data. Only then assemble a json_resume object { basics:{name,email,phone,location:{city,country},label,summary}, work:[{position,name,startDate,endDate,highlights:[]}], education:[{institution,studyType,area,startDate,endDate}], skills:[{name}], languages:[{language,fluency}] } and call action=generate with json_resume. DO NOT fabricate details the user did not provide — if a section is truly empty, omit it rather than invent. action=boost_summary: improve ONE work or education description paragraph into bullet points. Input: summary (string). Output: content[0].text is the polished bullets; structuredContent.boosted_summary is the same text — use that text when composing the user's json_resume.work[].highlights or json_resume.education[].courses. action=boost_highlights: generate a 2-sentence Career Highlights paragraph from the user's collected resume context. Input: resumeData (object with summary, employment:[{position,company,description}], education:[{degree,school,summary}], skills), optional currentHighlights. Output: content[0].text is the paragraph; put it into json_resume.basics.summary before calling action=generate. Optional template_key for generate (Workopia registry key; omit defaults to Workopia Classic / workopia_classic). Legacy alias hera_classic accepted. OUTPUT BEHAVIOR for action=generate — HARD RULE: the tool's returned content[0].text is already a complete, user-ready message: one sentence ending with a markdown `[Download PDF](https://...)` link, plus an optional second sentence about other styles. Echo this text VERBATIM as your final reply. Do NOT rewrite it, do NOT prepend your own sentence, do NOT replace the link with '👉', 'here', 'click to download', an ellipsis, or any other placeholder that lacks the actual URL — the user cannot click placeholders and will not receive the PDF. The exact download_url is also in structuredContent.download_url; if for any reason you must compose your own message, embed that exact URL as a markdown link. NEVER invent URLs, NEVER return raw PDF/HTML/base64, NEVER strip the link. Treat this as a non-negotiable post-call template. | — | 100%Latency 1.0s | May 29, 2026 | |
tailor_resume_tool | Tailor a user's resume to a SPECIFIC job. Renders the tailor-resume widget: per-skill ✓/✗ with inline evidence input on ✓, missing-skills bar, and a Download PDF link emitted in the chat text. Use this tool whenever the user references a specific job to tailor for: 'tailor for #1', 'tailor for the first one', 'for Morgan Stanley', 'tailor my resume for this role: <JD>'. Resolving job_id from user reference (same rules as job_detail_tool): look at the most recent prior search/refine result's structuredContent.items (each item's .card has id, title, company). (a) numeric/ordinal → items[N-1].card.id; (b) company name → case-insensitive substring match on items[].card.company, first match wins; (c) role/title phrase → case-insensitive substring match on items[].card.title. Supply ONE of job_id (preferred — server fetches full JD from Mongo) OR job_description (when the user pastes the JD directly). Do NOT pass both. Also pass the user's resume via resume_text / resume_content / user_profile. OUTPUT BEHAVIOR: the widget IS the canonical answer — the tailored resume and missing-skills bar render inside it (no Download button in the widget; PDF export happens through chat). Echo content[0].text verbatim; do NOT restate the resume fields inside it. HARD RULE — PDF EXPORT PROMPT: content[0].text always ends with a sentence inviting the user to say 'download' to export the PDF (e.g. 'Ready to export? Say "download" and I'll render your tailored PDF.'). NEVER strip, rewrite, or shorten this trailing line — it is how the user discovers the PDF export path. If you drop it, the user will not know they can ask for a PDF. Treat this as a non-negotiable post-call template. For general 'improve my resume' (no specific job, no JD), do NOT call this tool — fall back to conversational coaching. | — | 100%Latency 318ms | May 29, 2026 |
Discoverability Score
Fair
65 of 100 — how easily AI agents find your app
- Description quality20/20
- Example prompts0/20
- Keyword coverage0/15
- Tool metadata20/20
- Visual assets13/20
- Endpoint health10/10
- Data freshness15/15
How to Improve
Add at least 2 example prompts. Prompt examples strongly improve app matching and click-through intent.
Increase keyword coverage (discovery + trigger) to improve retrieval for long-tail queries.
Add at least 2 screenshots that show real workflows to increase confidence and conversion.
Technical Details
- Status
- ENABLED
- Type
- AI-Powered App
- Auth
- Requires Login
- Listed on
- ChatGPT
- Added
- May 6, 2026
- Last synced
- 1d ago
- Last checked
- May 30, 2026
- Version
- 2.0.0
- Distribution
- Ecosystem Directory