Creates, resolves, audits, and rotates expiring, scope-limited qURLs for AI agent access.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag โ we're steadily working through the catalog.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Qurl MCP.
โ ๏ธ Renamed from
@layerv/qurl-mcpin v0.4.0. The old package is deprecated and will not receive further updates. If you're using@layerv/qurl-mcp@0.3.x, swap the scope in your MCP client config โ same binary, same API key, no other changes.
A qURL MCP Server that supports both local
stdiomode and remoteHTTPmode for creating, managing, resolving, and sharing secure access links.
qURL MCP exposes qURL capabilities to MCP clients, GPTs, ChatGPT, and other remote integrations.
It currently supports:
| Mode | Purpose | Start Command | Typical Use Case |
|---|---|---|---|
stdio | Local subprocess MCP server | npm run start | Claude Desktop, Cursor, Codex, and other local MCP clients |
http | Authenticated remote MCP server | npm run start:http | Remote agent runtimes behind HTTPS |
| Tool | Description |
|---|---|
create_qurl | Create a new qURL |
resolve_qurl | Resolve an access token into a protected target URL |
list_qurls | List qURL resources |
get_qurl | Fetch details for a single qURL |
delete_qurl | Delete a qURL |
extend_qurl | Extend qURL expiration |
update_qurl | Update qURL metadata or expiration |
mint_link | Mint a new access link for an existing resource |
batch_create_qurls | Create multiple qURLs in one request |
revoke_qurl_token | Revoke a specific token |
update_qurl_token | Update a specific token |
list_qurl_sessions | List active access sessions |
terminate_qurl_sessions | Terminate one or all active sessions |
| Tool | Mode | Description |
|---|---|---|
upload_file_qurl | stdio | Upload a local file and mint a qURL |
upload_file_data_qurl | stdio/HTTP | Upload base64 file content and mint a qURL |
upload_text_qurl | stdio/HTTP | Upload text content and mint a qURL |
upload_file_qurl is intentionally stdio-only. It can read any supported
PDF/image that the local MCP process user can access, so agents should invoke
it only for a path the user explicitly selected for sharing. Do not expose it
to untrusted prompts or autonomous agents: prompt injection could otherwise
select another readable PDF/image on the host. Run stdio under an OS account
whose filesystem access is limited to intended shareable content. HTTP mode
never registers this host-file tool.
The byte/text tools are also available in stdio so local clients can share
in-chat attachments without first materializing them at a known host path.
Connector upload and qURL minting are separate operations. If minting fails
after upload, the connector currently has no delete endpoint; the server logs
the orphaned resource_id for operator cleanup and returns the mint failure.
HTTP upload attempts remain bounded by the per-IP and per-credential MCP rate
limits; stdio operators should separately constrain autonomous retry loops.
Upload validation binds the declared media type to the filename plus format
start/end markers; it is not a malware scanner or full PDF/image decoder.
For polyglot resistance, a PDF's final %%EOF marker must be followed only by
ASCII whitespace; producer output with other trailing bytes is rejected even
if a permissive PDF reader would accept it. JPEG validation checks framing and
terminal markers rather than decoding image segments. The authenticated
connector must independently decode or otherwise fully validate content before
storage when semantic media validity matters. It must also preserve the
declared safe media type and serve downloads with X-Content-Type-Options: nosniff rather than inferring an executable type.
There is intentionally no application-level path allowlist: symlinks and
time-of-check/time-of-use races make a lexical prefix check a misleading
security boundary. Use a dedicated OS account, container, or read-only mount
whose readable files are already limited to the intended sharing directory.
The final path component is opened with O_NOFOLLOW; intermediate directory
symlinks retain normal filesystem behavior under this trusted-local-user
boundary.
| URI | Description |
|---|---|
qurl://links | Current qURL list |
qurl://usage | Current quota and usage information |
| Prompt | Description |
|---|---|
secure_a_service | Secure service integration prompt |
audit_links | Link audit prompt |
rotate_access | Access rotation prompt |
For a local stdio-only source install, use npm install --omit=optional; this
omits the AWS SDK. HTTP deployments using the DynamoDB credential quota must use
the ordinary install so the optional SDK is packaged.
Local stdio mode:
Remote HTTP mode:
If you want to use this server in stdio mode with a local MCP client:
Copy the tracked examples to create local configuration files:
The local files are gitignored so credentials and machine-specific paths are not committed.
Their responsibilities are:
| File | Purpose |
|---|---|
qurl-mcp.config.json | Shared runtime config used by both stdio and http modes |
qurl-mcp.http.json | HTTP-only server listener and public access config |
| Field | Purpose |
|---|---|
maxUploadFileDataBytes | Limits decoded and local file uploads (default 10mb) |
defaultQurlApiUrl | Base URL of the qURL backend API |
defaultQurlConnectorUrl | Base URL of the upload connector |
Shared settings have these environment overrides. Environment values take precedence over the shared config file. The process caches resolved shared settings but automatically invalidates that cache when the file metadata or any relevant environment value changes.
| Environment variable | Config field |
|---|---|
MCP_MAX_UPLOAD_FILE_DATA_BYTES | maxUploadFileDataBytes |
QURL_API_URL | defaultQurlApiUrl |
QURL_CONNECTOR_URL | defaultQurlConnectorUrl |
QURL_SMTP_HOST | smtp.host |
QURL_SMTP_PORT | smtp.port |
QURL_SMTP_SECURE | smtp.secure |
QURL_SMTP_USERNAME | smtp.username |
QURL_SMTP_PASSWORD | smtp.password |
QURL_SMTP_FROM_EMAIL | smtp.fromEmail |
QURL_SMTP_FROM_NAME | smtp.fromName |
QURL_SMTP_ALLOWED_RECIPIENTS | smtp.allowedRecipients |
QURL_SMTP_ALLOWED_RECIPIENT_DOMAINS | smtp.allowedRecipientDomains |
QURL_SMTP_MAX_RECIPIENTS_PER_MESSAGE | smtp.maxRecipientsPerMessage |
QURL_SMTP_MAX_RECIPIENTS_PER_HOUR | smtp.maxRecipientsPerHour |
QURL_PUBLIC_VIDEO_FILE_PATH | publicVideo.filePath |
QURL_PUBLIC_VIDEO_TITLE | publicVideo.title |
QURL_PUBLIC_VIDEO_PAGE_PATH | publicVideo.pagePath |
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/layervai-qurl-mcp)<a href="https://allmcps.com/mcp/layervai-qurl-mcp"><img src="https://allmcps.com/api/badge/layervai-qurl-mcp?style=directory" alt="Qurl MCP on AllMCPs" /></a>