Convert PDF/CSV to Markdown with AI-powered OCR via the PromptReady cloud API.
Official Model Context Protocol client for PromptReady — convert PDF/CSV to Markdown from AI agents (Grok, Claude Code, Cursor, and other MCP hosts).
Same PromptReady account and credits as the web app.
Data flow: your local PDF/CSV files are uploaded to the PromptReady cloud (
promptready.space) for OCR processing. Converted Markdown is downloaded back to your machine. Files are auto-deleted from the server 3 hours after your batch finishes. No long-term storage.
get_credits, convert_pdf, get_status, wait_and_download,
list_conversionsconvert_pdf returns a log_id; wait_and_download
/ get_status accept it and resolve via the database, so a server
restart, a redeploy, or a second back-to-back convert can no longer
orphan a finished job (results are kept 3 hours)/promptready:convert and five more (below)Once listed in the Claude Code plugin directory:
/plugin install promptready
pip install promptready-mcp
Or run it without installing:
uvx promptready-mcp
git clone https://github.com/hydrojwh/promptready-mcp.git
cd promptready-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
promptready-mcp-login
If you installed with uvx, the login command lives in the same package:
uvx --from promptready-mcp promptready-mcp-login
Either opens Google OAuth and saves credentials to
~/.config/promptready/credentials.json (file mode 0600). That path is in your
home directory, so it survives uvx cache resets. You can also log in from inside
an MCP host by calling the login tool.
After you sign in, the browser returns to http://127.0.0.1:18765/callback — a
local page started by the login command. No Supabase configuration is needed.
If browser-based Google login is not an option, the same command accepts email and password:
promptready-mcp-login --email you@x.com
Leave out --password and you will be prompted for it instead — this keeps the
password out of your shell history.
Already have an access token? Set PROMPTREADY_ACCESS_TOKEN in the environment
(MCP host or shell). Environment variables take precedence over the saved
credentials file.
If you are already in an MCP-capable agent, skip the JSON editing and just ask:
Install the PromptReady MCP server for me. The PyPI package is
promptready-mcp(stdio commandpromptready-mcp). Add it to your MCP config, then I will run thelogintool.
In Claude Code the agent can use the built-in CLI:
claude mcp add promptready -- promptready-mcp
Hosts do not pick up MCP config changes mid-session. After changing the
config, restart the host or reconnect the server — in Claude Code, open the
/mcp panel and reconnect.
The /mcp panel shows server status and lists the connected servers'
tools, but it does not run them: picking a tool in that list will
not invoke it. Tools are invoked through normal conversation — ask the
agent to convert a file and it calls convert_pdf for you. If a call
fails, reconnect from the panel first.
claude mcp add promptready -- promptready-mcp
The default scope is local (this project only). Use --scope user to
register it for all your projects, or --scope project to share the
registration through a committed .mcp.json.
Add to ~/.cursor/mcp.json (or .cursor/mcp.json for a single project):
{
"mcpServers": {
"promptready": {
"command": "promptready-mcp"
}
}
}
[mcp_servers.promptready]
command = "promptready-mcp"
enabled = true
tool_timeout_sec = 3600
{
"mcpServers": {
"promptready": {
"command": "promptready-mcp"
}
}
}
No access token in config files required after login.
promptready-mcpGUI hosts start servers with a narrow PATH, so a console script installed by
pip install --user is often invisible to them — the host reports a spawn
failure or "server disconnected" rather than a missing command.
Two reliable fixes:
{ "mcpServers": { "promptready": {
"command": "uvx", "args": ["promptready-mcp"] } } }
or point at the absolute path of the script:
/ABS/PATH/.venv/bin/promptready-mcp.
| Tool | Purpose |
|---|---|
login / logout | Browser auth / clear local credentials |
get_credits | Credit balance |
get_convert_settings / set_convert_settings | Saved convert defaults |
convert_pdf | Upload path → queue (optional wait) |
get_status | Status — by log_id (DB, restart-proof) or session |
wait_and_download | Wait + save .md, by log_id or session |
list_conversions | Recent conversions with log_id, status, downloadable |
Downloaded names follow the web app: {name}_PaddleOCR-VL.md (engine label).
Credits are deducted by the server when a job is queued, exactly as on the web
app. convert_pdf(wait=True) can run for a long time, so give the host a high
tool timeout.
log_id (0.4.0)convert_pdf returns log_id — the id of the conversion record in your
account. Unlike the session status, it survives backend restarts and later
converts:
convert_pdf(path="report.pdf") → {"log_id": "…uuid…", …}
wait_and_download(log_id="…uuid…") → saves report_PaddleOCR-VL-1.6.md
list_conversions(limit=10) → past conversions + their log_ids
Results are downloadable for 3 hours after completion (HTTP 410 after that —
converting again, with fresh credits, is then the only way). If a download
fails for another reason, retry wait_and_download with the same log_id;
never re-run convert_pdf for the same file.
MCP prompts are the human entry point: instead of describing what you
want, you pick a command. Hosts that surface prompts as slash commands
(Claude Code does) show them as /promptready:<name>:
| Slash command | Purpose |
|---|---|
/promptready:login | Log in (opens the browser Google sign-in) |
/promptready:logout | Log out on this machine |
/promptready:credits | Show your credit balance |
/promptready:convert | Convert a PDF/CSV to Markdown |
/promptready:site | Show the PromptReady web app URL |
/promptready:settings | Show — and optionally change — convert defaults |
Each command expands to a short instruction; the agent then calls the
matching tool (login, get_credits, convert_pdf, …) for you.
/promptready:convert optionally takes two positional arguments, input
path then output directory. Pick the command from the slash menu (hosts
may list it as promptready:convert (MCP)) and append the arguments:
/promptready:convert (MCP) report.pdf markdown-out
Arguments are split on whitespace and cannot be quoted, so paths with
spaces do not fit on the command line — run the command bare and give
the paths in chat instead. Line breaks and control characters in
arguments are rejected outright (0.3.8): an argument is interpolated
into the instruction the command expands to, and it must never be able
to start a line of its own. With no arguments the command asks you for
them. The conversion itself always goes through the convert_pdf tool:
never re-run it for the same file while a download is pending — that
queues a fresh conversion and spends fresh credits; the expanded command
tells the agent to call wait_and_download instead.
Hosts that do not map prompts to slash commands simply ignore this section; the tools keep working as before.
~/.config/promptready/* or .env.What this client talks to, so you can review it before installing:
https://promptready.space
(override with PROMPTREADY_BASE_URL, or the base URL saved at login — if you set
one, all API traffic, credentials included, goes to that host instead). When a
conversion finishes, the Markdown result may be fetched from a short-lived signed
download URL that the API returns (served from PromptReady's Cloudflare R2
storage); that request carries no credentials. There is no telemetry and no other
third-party host. During browser login a short-lived listener binds to 127.0.0.1
only, to receive the sign-in callback; your browser, not this client, talks to the
sign-in provider.convert_pdf, plus this client's own
config under ~/.config/promptready/ (credentials and convert defaults).~/.config/promptready/credentials.json (mode 600; override the path with
PROMPTREADY_CREDENTIALS_PATH); and your convert defaults in
~/.config/promptready/settings.json when you change settings (mode 600; override
with PROMPTREADY_SETTINGS_PATH). Nothing else is left on disk.promptready-mcp-login (browser or email) or supplied through
PROMPTREADY_ACCESS_TOKEN / PROMPTREADY_REFRESH_TOKEN. The client sends it only
to the PromptReady API, never to the signed download URL.Using the cloud API is subject to the Terms of Service and Privacy Policy. This MIT-licensed client does not grant free unlimited conversion. The license covers this client's source code only; use of the PromptReady cloud service (https://promptready.space) remains subject to its Terms of Service and Privacy Policy.
./scripts/smoke_stdio.sh
MIT — see LICENSE.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx promptready-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-hydrojwh-promptready-mcp": {
"command": "uvx",
"args": [
"promptready-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencepromptready-mcppypiio.github.hydrojwh/promptready-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.