MCP 서버

keywordise

com.keywordise/keywordise
비즈니스 및 운영 생산성 공개 · 연결 가능 MCP 2026-07-28

이 MCP로 할 수 있는 일

Matches a user's CV to vacancies, tailors CVs, answers screening questions from saved information, tracks applications, and submits job applications.

answer_screening_question
Answer an employer's screening question
Record the person's answer to one screening question on one application. The answer is written in the person's name and saved to their answer book, so the same question is never asked again. When it is the last required answer, the application is SUBMITTED to the employer. Only give an answer the person actually stated.
파괴적 작업 외부 접근 가능
입력 스키마
{'type': 'object', 'required': ['application_id', 'question_id', 'answer'], 'properties': {'answer': {'type': 'string', 'maxLength': 5000}, 'question_id': {'type': 'string'}, 'application_id': {'type': 'string'}}, 'additionalProperties': False}
cancel_subscription
Cancel my subscription at period end
Cancel the Pro subscription at the end of the current billing period. Access stays until then. Irreversible from here; the person can resubscribe later.
파괴적 작업
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
create_account
Create a Keywordise account
Register a new Keywordise account from the terminal and receive an API key for it. Requires accept_terms=true: the person accepts the Terms and Privacy Policy (https://keywordise.com/terms) and authorises Keywordise to apply for jobs on their behalf. A confirmation email is sent; applying opens once the address is confirmed. Trial: 7 days and 27 applications, then $49/month.
입력 스키마
{'type': 'object', 'required': ['email', 'password', 'accept_terms'], 'properties': {'email': {'type': 'string', 'format': 'email'}, 'password': {'type': 'string', 'maxLength': 256, 'minLength': 8}, 'accept_terms': {'type': 'boolean'}}, 'additionalProperties': False}
create_api_key
Mint another API key
Mint an additional API key for this account, for another machine or assistant. Shown once. Five active keys maximum.
입력 스키마
{'type': 'object', 'properties': {'label': {'type': 'string', 'maxLength': 60}}, 'additionalProperties': False}
delete_my_account
Delete my account permanently
Erase the account and everything in it: profile, CV files, matches, applications, answers, keys. Irreversible. Requires confirm_email equal to the account's address.
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['confirm_email'], 'properties': {'confirm_email': {'type': 'string', 'format': 'email'}}, 'additionalProperties': False}
delete_saved_answer
Forget a saved answer
Remove one answer from the answer book (an answer_id from list_saved_answers).
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['answer_id'], 'properties': {'answer_id': {'type': 'string'}}, 'additionalProperties': False}
describe_what_i_want
Set targeting from one sentence
Use when the person says what they are looking for in their own words ('senior remote data roles in the US, no agencies'). Turn a plain sentence ('remote data roles in Germany or the Netherlands, senior, not agencies') plus the saved CV into concrete targeting rules. Returns the inferred rules and the chips a person would confirm; with apply=true they are saved and the feed re-matches. preset: balanced | broad | focused.
입력 스키마
{'type': 'object', 'required': ['sentence'], 'properties': {'apply': {'type': 'boolean', 'default': False}, 'preset': {'enum': ['balanced', 'broad', 'focused'], 'type': 'string', 'default': 'balanced'}, 'sentence': {'type': 'string', 'maxLength': 1000}}, 'additionalProperties': False}
explain_job_match
Why this job does or does not fit me
Use for 'is this job a good fit', 'why this match', 'what am I missing for this role'. For one vacancy: the match percentage, the requirements this account's CV covers and the ones it is missing. With narrative=true, also a short written assessment with strengths and gaps (a paid model call; limited to 60 per hour).
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'A job_id from list_matching_jobs or list_my_applications.'}, 'narrative': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
export_my_data
Export everything Keywordise holds about me
The account's complete data as one JSON file (profile, targeting, matched jobs, applications, saved answers, run history, audit trail). Returned as a file; large accounts are told to download it in the app instead.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_account
My account and plan
The account behind this key: email and whether it is confirmed, plan state (trial days left, applications used and remaining, subscription), and how many API keys are active.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_apply_run_status
How my application run is going
Live progress of the latest run: running or not (from a heartbeat, not a status claim), processed of total, the job being worked on now, confirmed, needs review, skipped, closed.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_billing_portal_link
Manage my subscription (portal link)
A link to the payment provider's customer portal for this account's subscription, where invoices, the payment method and cancellation live.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_feed_reach
What my targeting is costing me
How many jobs the current targeting shows versus how many each single rule is hiding, and which one change would widen the feed most. Every number comes from re-asking the feed's own predicate with one control relaxed.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_job_posting
Read one job posting
The full description of one matched vacancy, with a short summary and highlights, plus the link that opens the posting from the app.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'A job_id from list_matching_jobs or list_my_applications.'}}, 'additionalProperties': False}
get_match_status
Is a match run in progress
Only for checking on a match or feed rebuild that is already running (after upload_cv, update_targeting or refresh_matches); to find or show jobs use list_matching_jobs. Live status of the latest match run (scanned, inserted, elapsed), the feed counts it produced, and `feed_build`: where the feed is in its build (queued, building, ready, failed). Poll after upload_cv, update_targeting or refresh_matches; the feed is final only when feed_build.feed_state.state is `ready`.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_my_cv_pdf
Render my CV as a PDF
The account's base CV (the saved profile, untailored) rendered as a PDF in the chosen design, returned as a file. No model call.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'design': {'type': 'string', 'maxLength': 40, 'description': 'Optional; defaults to the saved design.'}}, 'additionalProperties': False}
get_my_profile
Who am I acting for
Use when the person asks what is on their profile or CV. Not needed before searching or applying: those tools read the saved CV themselves. The CV profile Keywordise holds for this account (name, contact, summary, skills, roles, education), the job-targeting rules (countries, remote preference, keywords) and the plan status (applications remaining). Call this first.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_profile_gaps
What my CV is missing
The gaps in the saved profile that weaken applications (missing dates on a role, no contact phone, empty summary, …), each with a severity, so they can be fixed with update_profile.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_sent_cv_pdf
The exact CV that was sent
The tailored CV PDF that went to the employer for one application, returned as a file.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['application_id'], 'properties': {'application_id': {'type': 'string'}}, 'additionalProperties': False}
get_targeting
My job targeting
Every targeting rule the feed and the apply run obey: remote mode, geo scope and countries, locations, include/exclude keywords, title allow/block lists, seniority, salary, languages, work authorisation, company allow/block, daily and per-company caps, cover-letter and CV settings, screening defaults.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_tracker
My application tracker
The tracker board: applications grouped by the stage the person set (saved, applied, interview, offer, rejected) with their own notes.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
get_upgrade_link
Upgrade to Pro (checkout link)
A checkout link for the Pro plan ($49/month, 200 applications a month) from the active payment provider. The person opens it in a browser to pay; the account upgrades automatically when the payment lands.
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_api_keys
My API keys
The active API keys on this account: prefix, label, created and last used. Never the key itself.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_blocking_questions
Screening questions waiting on me
Questions employers asked on applications that are stalled until this account answers them, grouped by application, each with a suggested answer drawn from what the person answered before. Answer with answer_screening_question.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Maximum number of applications to expand.'}}, 'additionalProperties': False}
list_countries_with_jobs
Countries with live jobs
The countries the live pool actually has inventory in (ISO-2, name, job count), for choosing geo_countries in update_targeting.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_cv_designs
Available CV designs
The CV designs a tailored CV can be rendered in, with the account's current pick.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_facts_to_provide
Facts that would unblock the most applications
The universal screening facts this account has not answered yet (right to work, notice period, salary expectation, …), ranked by how many waiting applications each one unblocks. Answer them with save_answer.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_hidden_jobs
Jobs I hid
The jobs this account hid or disliked, newest first, so one can be put back.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_matching_jobs
Jobs that match my CV right now
Use when the person wants jobs or their best matches: 'find me jobs', 'my top matches', 'remote marketing jobs that fit my resume', 'what's new for me this week'. It already uses the saved CV, so there is no need to read the profile first. Live vacancies matched to this account's CV, ranked. Each job carries a calibrated match percentage, a recruiter-pass verdict with a one-line reason, and whether an application was already sent. Filter by match tier and freshness; page with offset.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'sort': {'enum': ['fit', 'fresh'], 'type': 'string', 'default': 'fit', 'description': 'fit = best match first; fresh = newest day first, best match within it.'}, 'fresh': {'enum': ['new', 'all'], 'type': 'string', 'default': 'new', 'description': 'new = posted in the last two weeks; all = the last month.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1}, 'match': {'enum': ['good', 'strong', 'all'], 'type': 'string', 'default': 'good', 'description': "Match tier. 'all' includes weak matches the recruiter pass rejected."}, 'offset': {'type': 'integer', 'default': 0, 'minimum': 0}, 'applied': {'enum': ['show', 'hide'], 'type': 'string', 'default': 'show', 'description': 'hide = leave out jobs already applied to.'}}, 'additionalProperties': False}
list_my_applications
Applications Keywordise sent for me
Use for 'what did I apply to', 'any replies', 'status of my applications'. Every application sent for this account: company, title, stage, outcome, when it went out, how many screening questions it still waits on, and the employer's acknowledgement where one was received.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 200, 'minimum': 1}, 'only_waiting_on_me': {'type': 'boolean', 'default': False, 'description': 'Only applications stalled on unanswered screening questions.'}, 'include_cover_letter': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
list_run_history
My recent match and application runs
The last five match runs and the last five application runs, with their counts and status.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_saved_answers
My saved screening answers
The answer book: every screening answer this account has given or taught, which future applications reuse automatically in any phrasing or language.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
login
Log in and get an API key
Exchange the account's email and password for a new API key, so a terminal or an assistant can act on the account. The key is shown once; keep it. Up to five keys may be active per account (revoke_api_key frees a slot).
입력 스키마
{'type': 'object', 'required': ['email', 'password'], 'properties': {'email': {'type': 'string', 'format': 'email'}, 'label': {'type': 'string', 'maxLength': 60, 'description': 'A name for this key, e.g. the machine it lives on.'}, 'password': {'type': 'string', 'maxLength': 256}}, 'additionalProperties': False}
move_tracker_card
Move an application to another stage
Set the tracker stage of one application: saved, applied, interview, offer or rejected.
입력 스키마
{'type': 'object', 'required': ['application_id', 'stage'], 'properties': {'stage': {'enum': ['saved', 'applied', 'interview', 'offer', 'rejected'], 'type': 'string'}, 'application_id': {'type': 'string'}}, 'additionalProperties': False}
preview_tailored_cv
Tailor my CV for one job (preview only)
Use for 'tailor my resume for this job' or 'what would you send for this one'. Rewrite this account's CV for one vacancy the way Keywordise would send it: headline, summary, the roles selected for this job with rewritten bullets, curated skills and a cover letter, every segment labelled tailored, verbatim or pinned. Nothing is sent. A paid model call, limited to 20 per hour; the same billing gate as applying.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'A job_id from list_matching_jobs or list_my_applications.'}}, 'additionalProperties': False}
rate_job
Hide, dislike or mark a job interesting
Feedback on one job: hide or dislike removes it from the feed and teaches the matcher what this person rejects; interested is a positive signal. Undo with unhide_job.
입력 스키마
{'type': 'object', 'required': ['job_id', 'action'], 'properties': {'action': {'enum': ['hide', 'dislike', 'interested'], 'type': 'string'}, 'job_id': {'type': 'string', 'description': 'A job_id from list_matching_jobs or list_my_applications.'}, 'reason': {'type': 'string', 'maxLength': 300}}, 'additionalProperties': False}
refresh_matches
Refresh my matches
Match the account's CV against the vacancies added since it last looked, in the background. Idempotent and cheap when nothing is new. force=true runs a full re-match regardless. rebuild=true rebuilds the feed from scratch through the same build as the app's Rebuild button (use it when the feed looks wrong). Every answer carries `feed_build`: poll get_match_status until its state is `ready` before reading list_matching_jobs, because a feed that is still building is not an empty feed.
입력 스키마
{'type': 'object', 'properties': {'force': {'type': 'boolean', 'default': False}, 'rebuild': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
resend_verification_email
Resend the confirmation email
Send the email-confirmation link again to this account's address. Applying is blocked until the address is confirmed; nothing else is.
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
revoke_api_key
Revoke an API key
Revoke one of this account's API keys immediately. Any terminal or assistant using it stops working at once. Revoking the key you are calling with ends this session.
파괴적 작업
입력 스키마
{'type': 'object', 'required': ['key_id'], 'properties': {'key_id': {'type': 'string', 'description': 'From list_api_keys.'}}, 'additionalProperties': False}
save_answer
Teach an answer once, for every application
Add or replace a screening answer in the answer book ('What is your notice period?' → '1 month'). Applications already waiting on that fact are completed and sent in the background. Only save what the person actually stated.
입력 스키마
{'type': 'object', 'required': ['question', 'answer'], 'properties': {'kind': {'enum': ['text', 'boolean', 'select', 'number'], 'type': 'string', 'default': 'text'}, 'answer': {'type': 'string', 'maxLength': 5000}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'For select questions: the choices the form offers.'}, 'question': {'type': 'string', 'maxLength': 500}}, 'additionalProperties': False}
set_cv_design
Choose my CV design
Set the design every tailored CV is rendered in (a key from list_cv_designs).
입력 스키마
{'type': 'object', 'required': ['design'], 'properties': {'design': {'type': 'string', 'maxLength': 40}}, 'additionalProperties': False}
set_tracker_note
Write a note on an application
Replace the person's own note on one tracked application (interview date, contact, next step).
입력 스키마
{'type': 'object', 'required': ['application_id', 'notes'], 'properties': {'notes': {'type': 'string', 'maxLength': 2000}, 'application_id': {'type': 'string'}}, 'additionalProperties': False}
start_apply_run
Apply to my matching jobs
Use when the person says 'apply for me', 'apply to the best matches' or 'apply to this job' (pass job_id). Show them the jobs first. Start an application run: Keywordise takes up to `limit` of the matching jobs (same filters as list_matching_jobs, best fit first, never one already applied to), tailors the CV and cover letter for each, answers the employer's screening questions from the saved answers, and SUBMITS inside the employer's own system. Real applications leave in the person's name; needs a confirmed email and an active plan; counts against the plan. dry_run=true does everything except submit. Poll get_apply_run_status.
파괴적 작업 외부 접근 가능
입력 스키마
{'type': 'object', 'properties': {'fresh': {'enum': ['new', 'all'], 'type': 'string', 'description': "Freshness window; defaults to the account's saved filter."}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 100, 'minimum': 1}, 'match': {'enum': ['good', 'strong', 'all'], 'type': 'string', 'description': "Match tier to draw from; defaults to the account's saved filter."}, 'job_id': {'type': 'string', 'description': 'Apply to exactly this ONE job (an id from list_matching_jobs) instead of a filtered batch — the same run, scoped to it. limit/match/fresh are ignored when set.'}, 'dry_run': {'type': 'boolean', 'default': False}}, 'additionalProperties': False}
stop_apply_run
Stop my application run
Use for 'stop applying', 'pause', 'hold off'. Ask the running application run to stop after the job it is on. Nothing is left half-done; applications already sent stay sent.
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
suggest_keywords
Keywords my CV suggests
Search keywords derived from the saved profile, useful as include_keywords in update_targeting.
읽기 전용 멱등성
입력 스키마
{'type': 'object', 'properties': {}, 'additionalProperties': False}
unhide_job
Put a hidden job back
Undo hide or dislike: the job returns to the feed and the negative signal is dropped.
입력 스키마
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'A job_id from list_matching_jobs or list_my_applications.'}}, 'additionalProperties': False}
update_profile
Edit my profile
Change fields of the saved profile without re-uploading the CV. Send only the fields to change (full_name, contact_email, phone, location, city, address, postcode, professional_summary, skills, pinned_skills, languages, experience, education, projects, certifications, links, …); everything else is untouched. The feed is re-ranked against the new CV.
입력 스키마
{'type': 'object', 'required': ['patch'], 'properties': {'patch': {'type': 'object', 'description': 'Profile fields to change, by name.'}}, 'additionalProperties': False}
update_targeting
Change my job targeting
Change targeting rules; send only the keys to change (remote_mode any|remote|hybrid|onsite, geo_scope worldwide|region|country, geo_countries [ISO-2], locations, include_keywords, exclude_keywords, title_allow, title_block, seniority, salary_min, currency, languages, company_block, max_apps_per_day, max_apps_per_company, cover_letter_enabled, cv_tone, tailor_instructions, years_experience, salary_expectation, notice_period, …). The feed re-matches in the background.
입력 스키마
{'type': 'object', 'required': ['patch'], 'properties': {'patch': {'type': 'object', 'description': 'Targeting fields to change, by name.'}}, 'additionalProperties': False}
upload_cv
Upload my CV (PDF or DOCX)
Use when the person shares or mentions their resume/CV ('here's my resume', 'use my CV'). Upload a CV file and turn it into the account's profile: the same parser the app uses reads the document into name, contact, summary, roles, skills, languages and education. With save=true (default) the profile is saved and the job feed is built from it; with save=false the parsed profile is returned for review only. Max 8 MB.
입력 스키마
{'type': 'object', 'required': ['filename', 'content_base64'], 'properties': {'save': {'type': 'boolean', 'default': True}, 'filename': {'type': 'string', 'maxLength': 120, 'description': 'e.g. cv.pdf'}, 'content_base64': {'type': 'string', 'description': "The file's bytes, base64-encoded."}}, 'additionalProperties': False}
변경됨
list_my_applications
2026년 9월 27일 2:53 AM
변경됨
stop_apply_run
2026년 9월 27일 2:53 AM
변경됨
start_apply_run
2026년 9월 27일 2:53 AM
변경됨
get_match_status
2026년 9월 27일 2:53 AM
변경됨
refresh_matches
2026년 9월 27일 2:53 AM
변경됨
preview_tailored_cv
2026년 9월 27일 2:53 AM
변경됨
explain_job_match
2026년 9월 27일 2:53 AM
변경됨
list_matching_jobs
2026년 9월 27일 2:53 AM
변경됨
describe_what_i_want
2026년 9월 27일 2:53 AM
변경됨
upload_cv
2026년 9월 27일 2:53 AM
변경됨
get_my_profile
2026년 9월 27일 2:53 AM
추가됨
set_tracker_note
2026년 9월 17일 12:35 PM
추가됨
move_tracker_card
2026년 9월 17일 12:35 PM
추가됨
get_tracker
2026년 9월 17일 12:35 PM
추가됨
list_facts_to_provide
2026년 9월 17일 12:35 PM
추가됨
delete_saved_answer
2026년 9월 17일 12:35 PM
추가됨
save_answer
2026년 9월 17일 12:35 PM
추가됨
list_saved_answers
2026년 9월 17일 12:35 PM
추가됨
list_run_history
2026년 9월 17일 12:35 PM
추가됨
get_sent_cv_pdf
2026년 9월 17일 12:35 PM
추가됨
answer_screening_question
2026년 9월 17일 12:35 PM
추가됨
list_blocking_questions
2026년 9월 17일 12:35 PM
추가됨
list_my_applications
2026년 9월 17일 12:35 PM
추가됨
stop_apply_run
2026년 9월 17일 12:35 PM
추가됨
get_apply_run_status
2026년 9월 17일 12:35 PM
추가됨
start_apply_run
2026년 9월 17일 12:35 PM
추가됨
get_match_status
2026년 9월 17일 12:35 PM
추가됨
refresh_matches
2026년 9월 17일 12:35 PM
추가됨
list_hidden_jobs
2026년 9월 17일 12:35 PM
추가됨
unhide_job
2026년 9월 17일 12:35 PM