publicsofttools-mcp
PublicSoftTools MCP Server
Give any MCP-compatible AI agent (Claude, Cursor, Windsurf) access to 14 utility tools from PublicSoftTools.
npm: npx publicsofttools-mcp
API docs: https://www.publicsofttools.com/docs
Get a key: https://www.publicsofttools.com/account/api-keys
Tools included
Tool | Endpoint | Description |
|
| QR code as base64 PNG or raw SVG |
|
| MD5, SHA-1, SHA-256, SHA-384, SHA-512 |
|
| UUID v4 — up to 100 at once |
|
| Encode or decode, with URL-safe variant |
|
| Cryptographically secure password |
|
| Geolocation, ISP, ASN, proxy/VPN detection |
|
| SSL certificate details + days remaining |
|
| A, AAAA, MX, TXT, CNAME, NS, SOA records |
|
| Domain registrar, dates, nameservers |
|
| Reduce PDF file size (max 4 MB) |
|
| Combine 2–20 PDFs into one |
|
| Split by page range or every N pages |
|
| Convert PDF to editable .docx |
|
| Remove permission restrictions |
Related MCP server: mcp-server-devutils
Prerequisites
Node.js 18+ (required for native
fetchsupport)A PublicSoftTools API key — get one free (1,500 calls/month, no credit card)
Install & configure
Claude Desktop
Add to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"publicsofttools": {
"command": "npx",
"args": ["-y", "publicsofttools-mcp"],
"env": {
"PST_API_KEY": "your_api_key_here"
}
}
}
}Restart Claude Desktop. The tools will appear in the tools panel.
Cursor
Open Settings → MCP and add:
{
"publicsofttools": {
"command": "npx",
"args": ["-y", "publicsofttools-mcp"],
"env": { "PST_API_KEY": "your_api_key_here" }
}
}Windsurf
Open Settings → MCP Servers and add the same JSON block as Cursor above.
Tool reference
All tools require the PST_API_KEY environment variable. All file inputs/outputs use base64-encoded content.
generate_qr_code
Generate a QR code image for any text, URL, or data.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Text, URL, or data to encode |
| number | no | 256 | Output size in pixels (64–1024) |
|
| no |
| Output image format |
| string | no |
| Dark module color (hex) |
| string | no |
| Light module color (hex) |
|
| no |
| Error correction level |
Response
{
"image": "data:image/png;base64,iVBORw0...",
"format": "png",
"size": 256
}For format: "svg", image is a raw SVG string instead of a data URL.
generate_hash
Hash any text. Omit algorithm to get all five hashes in one call.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Text to hash (max 100,000 chars) |
|
| no | all | Hash algorithm |
|
| no |
| Output encoding |
Response (all algorithms)
{
"hashes": {
"md5": "5f4dcc3b5aa765d61d8327deb882cf99",
"sha1": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8",
"sha256": "5e884898da28047151d0e56f8dc629277...",
"sha384": "a8b64babd0aca91a59bdbb7761b421d4...",
"sha512": "b109f3bbbc244eb82441917ed06d618b..."
},
"encoding": "hex",
"input_length": 8
}generate_uuid
Generate UUID v4 values in batch.
Parameters
Name | Type | Required | Default | Description |
| number | no | 1 | Number of UUIDs to generate (1–100) |
Response
{
"uuids": [
"550e8400-e29b-41d4-a716-446655440000",
"6ba7b810-9dad-11d1-80b4-00c04fd430c8"
],
"count": 2
}encode_decode_base64
Encode text to base64 or decode base64 back to plain text.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Input text (max 500,000 chars) |
|
| yes | — | Operation to perform |
| boolean | no | false | Use URL-safe variant ( |
Response
{
"result": "aGVsbG8gd29ybGQ=",
"action": "encode",
"url_safe": false,
"input_length": 11,
"output_length": 16
}generate_password
Generate a cryptographically secure random password.
Parameters
Name | Type | Required | Default | Description |
| number | no | 16 | Password length (8–128) |
| boolean | no | true | Include uppercase letters (A–Z) |
| boolean | no | true | Include digits (0–9) |
| boolean | no | true | Include symbols (!@#$…) |
Response
{
"password": "kR7#mQ2@xZ9!wP4$",
"length": 16,
"entropy_bits": 98.6
}lookup_ip
Look up geolocation and network info for any IPv4 or IPv6 address.
Parameters
Name | Type | Required | Description |
| string | yes | IPv4 or IPv6 address (e.g. |
Response
{
"ip": "8.8.8.8",
"country": "United States",
"country_code": "US",
"region": "California",
"city": "Mountain View",
"zip": "94043",
"lat": 37.4056,
"lon": -122.0775,
"timezone": "America/Los_Angeles",
"isp": "Google LLC",
"org": "Google LLC",
"asn": "AS15169 Google LLC",
"is_mobile": false,
"is_proxy": false,
"is_hosting": true
}check_ssl
Check SSL/TLS certificate details for any domain.
Parameters
Name | Type | Required | Description |
| string | yes | Domain name (e.g. |
Response
{
"domain": "example.com",
"valid": true,
"issuer": "Let's Encrypt",
"subject": "example.com",
"san": ["example.com", "www.example.com"],
"valid_from": "2026-01-01T00:00:00Z",
"valid_to": "2026-04-01T00:00:00Z",
"days_remaining": 22,
"protocol": "TLSv1.3"
}lookup_dns
Query DNS records for a domain. Omit type to get all available record types at once.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Domain to query (e.g. |
|
| no | all | Record type |
Response
{
"domain": "example.com",
"records": {
"A": ["93.184.216.34"],
"MX": [{ "exchange": "mail.example.com", "priority": 10 }],
"NS": ["ns1.example.com", "ns2.example.com"],
"TXT": ["v=spf1 include:_spf.example.com ~all"]
},
"queried_at": "2026-06-09T12:00:00Z"
}whois_lookup
Get domain registration information.
Parameters
Name | Type | Required | Description |
| string | yes | Domain to look up (e.g. |
Response
{
"domain": "example.com",
"registrar": "Example Registrar, Inc.",
"registered_at": "1995-08-14T00:00:00Z",
"expires_at": "2027-08-13T00:00:00Z",
"updated_at": "2024-08-13T00:00:00Z",
"nameservers": ["a.iana-servers.net", "b.iana-servers.net"],
"status": ["clientDeleteProhibited", "clientTransferProhibited"]
}compress_pdf
Reduce PDF file size using Ghostscript compression. Max file size: 4 MB.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Base64-encoded PDF content |
|
| no |
| Compression level. |
Response
{
"pdf": "<base64-encoded compressed PDF>",
"original_size": 2048000,
"compressed_size": 819200,
"reduction_percent": 60
}merge_pdfs
Merge 2–20 PDF files into a single document. Max 4 MB per file.
Parameters
Name | Type | Required | Description |
| string[] | yes | Array of base64-encoded PDFs to merge in order (2–20 files) |
Response
{
"pdf": "<base64-encoded merged PDF>",
"page_count": 12,
"files_merged": 3
}split_pdf
Split a PDF into multiple documents. Max file size: 4 MB.
Parameters
Name | Type | Required | Default | Description |
| string | yes | — | Base64-encoded PDF to split |
|
| yes | — | Split mode |
| string | no | — | Page range when |
| number | no | — | Split every N pages when |
Response
{
"files": [
"<base64-encoded PDF part 1>",
"<base64-encoded PDF part 2>"
],
"count": 2
}pdf_to_word
Convert a PDF to an editable Word document (.docx). Max file size: 4 MB.
Parameters
Name | Type | Required | Description |
| string | yes | Base64-encoded PDF to convert |
Response
{
"docx": "<base64-encoded .docx file>",
"page_count": 5
}unlock_pdf
Remove owner-password permission restrictions from a PDF (print lock, copy lock, etc.). Does not require the password if only owner restrictions are set.
Parameters
Name | Type | Required | Description |
| string | yes | Base64-encoded PDF |
| string | no | PDF password, if the file requires one to open |
Response
{
"pdf": "<base64-encoded unlocked PDF>",
"was_encrypted": true
}Authentication
Set your API key as an environment variable:
export PST_API_KEY=pst_live_your_key_hereOr pass it inline for a one-off test:
PST_API_KEY=pst_live_your_key_here node dist/index.jsThe key is sent as X-Api-Key: pst_live_... on every request.
Rate limits & plans
Plan | Price | Calls/month |
Free | $0 | 1,500 |
Starter | $29/mo | 15,000 |
Pro | $99/mo | 100,000 |
Business | Custom | 1,000,000+ |
When you exceed your limit the API returns 429 Too Many Requests. Limits reset on the 1st of each month (UTC).
Get or upgrade your key: https://www.publicsofttools.com/account/api-keys
Troubleshooting
"PST_API_KEY environment variable is required"
The server exits immediately if no key is set. Make sure the env block in your MCP config has PST_API_KEY set.
Tools don't appear in Claude Desktop
Verify the JSON config is valid (no trailing commas), then fully quit and reopen Claude Desktop — a window close isn't enough.
401 Unauthorized
Your API key is invalid or has been revoked. Look it up again at https://www.publicsofttools.com/account/api-keys.
429 Too Many Requests
You've hit your monthly limit. Upgrade your plan or wait for the 1st-of-month reset.
413 File Too Large
PDF endpoints have a 4 MB binary limit. Compress or split the file before sending.
Node version error
Run node --version. You need Node 18 or later for native fetch. Update via https://nodejs.org.
License
MIT — see LICENSE
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DrEjazAhmed/publicsofttools-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server