{"name":"io.github.layervai/qurl-mcp","slug":"layervai-qurl-mcp","title":"qURL","description":"Mint, resolve, audit, and rotate scope-limited expiring access links (qURLs) for AI agents.","url":"https://mcp.market/server/layervai-qurl-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":32,"stars":4,"forks":1,"downloads_week":22,"last_push_at":"2026-09-19T19:10:08.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/layervai/qurl-mcp","website":"https://layerv.ai","version":"0.5.0","remotes":[],"packages":[{"registryType":"npm","identifier":"@layervai/qurl-mcp","version":"0.5.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key for the qURL API with qurl:read, qurl:write, and/or qurl:resolve scopes. Obtain from https://layerv.ai.","isRequired":true,"format":"string","isSecret":true,"name":"QURL_API_KEY"},{"description":"qURL API base URL. Defaults to https://api.layerv.ai. Override only for testing against a non-production qURL backend.","format":"string","default":"https://api.layerv.ai","name":"QURL_API_URL"},{"description":"Connector base URL used by local-file, file-data, and text-to-PDF upload tools before minting a qURL.","format":"string","name":"QURL_CONNECTOR_URL"},{"description":"Optional path to a shared qURL MCP config file. Both stdio and HTTP modes can read SMTP, connector, and default API settings from this file.","format":"string","name":"QURL_MCP_CONFIG"},{"description":"Maximum decoded/local upload size. Accepts bytes or units such as 10mb; capped at 100mb.","format":"string","default":"10mb","name":"MCP_MAX_UPLOAD_FILE_DATA_BYTES"},{"description":"SMTP hostname for optional qURL link delivery.","format":"string","name":"QURL_SMTP_HOST"},{"description":"SMTP port for optional qURL link delivery.","format":"string","name":"QURL_SMTP_PORT"},{"description":"Whether SMTP uses an implicit TLS connection (true/false).","format":"string","name":"QURL_SMTP_SECURE"},{"description":"SMTP authentication username.","format":"string","isSecret":true,"name":"QURL_SMTP_USERNAME"},{"description":"SMTP authentication password or app-specific credential.","format":"string","isSecret":true,"name":"QURL_SMTP_PASSWORD"},{"description":"Validated sender email address for qURL delivery.","format":"string","name":"QURL_SMTP_FROM_EMAIL"},{"description":"Optional sender display name for qURL delivery.","format":"string","name":"QURL_SMTP_FROM_NAME"},{"description":"Optional comma-separated exact recipient allowlist.","format":"string","name":"QURL_SMTP_ALLOWED_RECIPIENTS"},{"description":"Optional comma-separated recipient-domain allowlist.","format":"string","name":"QURL_SMTP_ALLOWED_RECIPIENT_DOMAINS"},{"description":"Maximum recipients in one delivery request (default 10).","format":"string","default":"10","name":"QURL_SMTP_MAX_RECIPIENTS_PER_MESSAGE"},{"description":"Maximum attempted recipients per qURL key per fixed hourly window (default 100).","format":"string","default":"100","name":"QURL_SMTP_MAX_RECIPIENTS_PER_HOUR"}]}],"tools":[{"name":"batch_create_qurls","description":"Create up to 100 qURLs in a single request. The single-call alternative to looping `create_qurl` — saves round trips and returns a single envelope of per-item results.","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_qurl","description":"Create a qURL — a policy-bound, expiring access link that gates a target URL with optional IP/geo/UA/AI-agent filters and time or session limits.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_qurl","description":"Permanently revoke a qURL — the link and every access token under it stop working immediately.","write_action":true,"price_micros":0,"input_schema":null},{"name":"extend_qurl","description":"Push out the expiration of an active qURL by a relative duration.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_qurl","description":"Fetch a single qURL resource by ID and return its current state plus a bounded preview of access tokens.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_qurl_sessions","description":"List active access sessions for a qURL resource.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_qurls","description":"List qURL resources, paginated and optionally filtered by status, date range, or search text.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mint_link","description":"Mint a fresh access link for an existing qURL resource — same one-shot display semantics as `create_qurl.qurl_link`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"resolve_qurl","description":"Redeem a qURL access token (the `at_` prefix you pulled out of a `qurl_link`) to reveal the underlying URL and obtain a time-bound, IP-bound network access grant.","write_action":false,"price_micros":0,"input_schema":null},{"name":"revoke_qurl_token","description":"Revoke one qURL token under a resource without revoking the whole resource.","write_action":false,"price_micros":0,"input_schema":null},{"name":"terminate_qurl_sessions","description":"Terminate active access sessions for a qURL resource.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_qurl","description":"Update a qURL's expiration, tags, description, custom domain, or proxy host-header behavior. The richer alternative to `extend_qurl` — use `update_qurl` whenever you need anything beyond a relative time push.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_qurl_token","description":"Update one qURL token under a resource: expiration, label, access policy, max sessions, or session duration.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_file_data_qurl","description":"Upload base64-encoded PDF or raster image content to a qURL connector, then mint an access link for it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_file_qurl","description":"Upload a local PDF or raster image file to a qURL connector, then mint an access link for it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_text_qurl","description":"Render text content into a temporary PDF, upload that PDF to a qURL connector, then mint an access link for it.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-19T19:28:37.013Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:28:36.932Z","components":{"code":{"score":25,"max":25,"notes":["95 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@layervai/qurl-mcp","version":"0.5.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-09-19T03:52:34.554Z","repositoryUrl":"git+https://github.com/layervai/qurl-mcp.git","weeklyDownloads":22}],"repo":{"found":true,"owner":"layervai","repo":"qurl-mcp","archived":false,"pushedAt":"2026-09-19T19:10:08Z","stars":4,"forks":1,"openIssues":25,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/235012835?v=4","ownerCreatedAt":"2025-09-29T02:39:47Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/235012835?v=4&s=128","source":"registry","width":128,"height":128},"presence":{"stars":4,"forks":1,"downloadsWeek":22,"license":"MIT","lastPushAt":"2026-09-19T19:10:08.000Z","score":32}}}},"grade_history":[],"reviews":[]}