PasteApply

Honest resume/cover tailor for agents. Free generate; Stripe unlock for downloads. Streamable HTTP.

Should I use this

Quality & Safety

B
Description quality
97%
Schema completeness
67%
Naming quality
93%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'generate' description contains placeholder textin generate
  • INFOTool description contains placeholder or incomplete textin generate

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,319Tokens (tool definitions)
~548 BTypical response size
Moderate attention impact (1.03% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://pasteapply.com/mcp"
    }
  }
}

Remote endpoints

https://pasteapply.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡status

Read PasteApply readiness (openaiConfigured, stripeConfigured, prices, plan/unlocks when Bearer pa_). Paid bots: Authorization Bearer pa_… from confirm_payment or POST /api/agent-key. Ladder $3=1/$5=5/$10=50/$20=200. Honesty lock: we only rearrange what is already true. Never invent employers, dates, skills, or metrics.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡store_resume(resume)

Store resume text in the vault and get a resumeId (rs_1.<uuid>) to reuse on generate. Prefer resumeId on later generate over re-pasting the full resume. Pass resume text here. For PDF/DOCX/DOC/TXT/MD files, use HTTP POST /api/resumes multipart field "file" (max ~8MB) — this MCP tool is text-only. Stored text is used as-is (honesty lock; never invent employers). TTL ~30 days. Honesty lock: we only rearrange what is already true. Never invent employers, dates, skills, or metrics.

Input Schema

{
  "type": "object",
  "properties": {
    "resume": {
      "type": "string"
    }
  },
  "required": [
    "resume"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡generate(jobPosting, jobUrl, resume, resumeId, useSample, ...)

Tailor a resume and cover letter to one job posting. Pass jobPosting text and/or jobUrl (public http(s); we fetch+strip HTML; prefer pasted jobPosting if both). Pass resume text and/or resumeId from store_resume / POST /api/resumes (prefer resumeId over re-pasting; pasted resume still wins if both). Resume or resumeId required unless useSample. Unpaid generate returns a teaser only (coverage, fit.recommend skip|weak|apply with mustHavesMissing/impliedOnly, recommendUnlock false when skip / true when weak|apply with optional unlockAdvice, proof, short what-changed, redacted sample). Check recommendUnlock / fit.recommend before unlock_link — do not unlock when skip. Full letter and resume require unlock_link or a paid Bearer pa_… key with unlocks remaining. Free daily cap → HTTP 429 code free_cap + retryAfter; paid month unlock cap → HTTP 402 code unlock_quota (not retry-later). Optional BYOK: modelProvider openai|anthropic as a tool arg; send the provider key only in connection header X-PasteApply-BYOK-Key (env-var placeholder — never a literal key in tool args or chat). Hosted is default. Paid bots: Authorization Bearer pa_… from confirm_payment or POST /api/agent-key. Ladder $3=1/$5=5/$10=50/$20=200. Honesty lock: we only rearrange what is already true. Never invent employers, dates, skills, or metrics. If the posting wants something not on the source resume, omit it.

Input Schema

{
  "type": "object",
  "properties": {
    "jobPosting": {
      "type": "string"
    },
    "jobUrl": {
      "type": "string"
    },
    "resume": {
      "type": "string"
    },
    "resumeId": {
      "type": "string"
    },
    "useSample": {
      "type": "boolean"
    },
    "proPasses": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "modelProvider": {
      "type": "string",
      "enum": [
        "hosted",
        "openai",
        "anthropic"
      ]
    },
    "model": {
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡unlock_link(generationId, price)

Create a Stripe Checkout URL so a HUMAN can pay $5/mo Export (5 unlocks, default), $3/mo (1 unlock), $10/mo Pro (50 unlocks + extras), or $20/mo (200 unlocks + Pro extras). After the human pays, poll get_generation until paid:true for paid files fields (files.ready, files.pdf, files.docx, files.coverPdf, files.expiresAt, files.coverLetter, files.resume). confirm_payment only if the poll stays unpaid (also returns apiKey pa_…). Never scrape card UI. Never complete Stripe Checkout as the user. Hand the Checkout URL to a human. Honesty lock: we only rearrange what is already true. Never invent employers, dates, skills, or metrics.

Input Schema

{
  "type": "object",
  "properties": {
    "generationId": {
      "type": "string"
    },
    "price": {
      "type": "string",
      "enum": [
        "monthly",
        "export",
        "pro",
        "power"
      ]
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡confirm_payment(sessionId)

Fallback unlock when get_generation still shows paid:false after the human paid (slow webhook). Pass the cs_ session id from the success URL. Happy path: poll get_generation until paid:true — no cs_ required. When paid, returns full coverLetter, structured resume, files.pdf/docx/coverPdf absolute URLs (?dl= token lasts UTC billing month), and apiKey (Authorization Bearer pa_… for later status/generate). Or POST /api/agent-key {sessionId}. Never scrape card UI. Never complete Stripe Checkout as the user. Hand the Checkout URL to a human.

Input Schema

{
  "type": "object",
  "properties": {
    "sessionId": {
      "type": "string"
    }
  },
  "required": [
    "sessionId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢get_generation(id, generationId)

Happy path after pay: poll until paid:true (webhook persists the unlock). Poll a generation including paid/unlocked after the human pays. Pass id or generationId (same uuid from generate). When paid:true: full coverLetter, resume, and files.ready/files.pdf/files.docx/files.coverPdf/files.expiresAt/files.coverLetter/files.resume (pdf/docx/coverPdf ?dl= URLs last the UTC billing month; refresh via get_generation anytime in-month). On file GET 403, re-call get_generation for a fresh token. Honesty lock: we only rearrange what is already true. Never invent employers, dates, skills, or metrics.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "generationId": {
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools