Share Link Resolver
Turn a public share link into its files or a social canonical link, with direct URLs and hand-off.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"sharelink": {
"url": "https://sharelink.openkrill.app/mcp"
}
}
}Remote endpoints
https://sharelink.openkrill.app/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
π’resolve_share_link(url, password)
Use this when the user pastes a cloud drive share link (Google Drive, Baidu Netdisk ηΎεΊ¦η½η) or a social post link (YouTube, X or Twitter, Reddit, TikTok, Pinterest, Instagram, Threads, Facebook, LinkedIn, Telegram, Bilibili) and wants the files, a direct download or the canonical link. Pass `url`, or the whole share message; `password` is the Baidu extraction code (ζεη ) when sent apart from the link. A drive link returns its files with name, size and date, and Google Drive a direct_url with ready curl, aria2c and Aria2 or Motrix hand-off. A social link returns canonical_url: the platform's own form of the link, tracking parameters dropped, short links followed once. Public links only; private files are refused. Nothing stored.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 8,
"maxLength": 2048,
"description": "The share link as the owner sent it, such as https://drive.google.com/file/d/<id>/view or https://pan.baidu.com/s/1<code>?pwd=abcd."
},
"password": {
"description": "The share's extraction code (Baidu ζεη ), when the owner sent one apart from the link. A pwd= in the link is read on its own.",
"type": "string",
"maxLength": 32
}
},
"required": [
"url"
],
"additionalProperties": false,
"examples": [
{
"url": "https://drive.google.com/file/d/1oRRGuq_eDWEjauZZmowLu4m_57W3xqCc/view?usp=sharing"
}
]
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"need_password",
"wrong_password",
"not_found",
"private",
"quota",
"unsupported",
"unavailable"
]
},
"provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The registry id of the drive, such as google_drive or baidu."
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"canonical_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The link in the provider's own canonical form, read from a social share link or a short link's redirect. Null for a drive share, which resolves to files instead."
},
"message": {
"type": "string",
"description": "One plain sentence on what was found or what to do next."
},
"download": {
"type": "string",
"enum": [
"direct",
"sign_in_required",
"none"
],
"description": "direct: direct_url works with curl. sign_in_required: the drive lists the files but serves bytes only to a signed-in account."
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The path inside the share, for drives that show one."
},
"is_folder": {
"type": "boolean"
},
"size_bytes": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"modified": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "ISO 8601 time the drive reports, when it reports one."
},
"open_url": {
"type": "string",
"description": "Where the file or folder opens at the drive."
},
"direct_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "A URL that downloads the bytes with no sign-in, or null when the drive needs a signed-in account."
},
"handoff": {
"anyOf": [
{
"type": "object",
"properties": {
"curl": {
"type": "string",
"description": "A curl command that saves the file under its own name."
},
"aria2c": {
"type": "string",
"description": "An aria2c command line with 4 connections."
},
"aria2_rpc": {
"type": "object",
"properties": {
"jsonrpc": {
"type": "string",
"const": "2.0"
},
"id": {
"type": "string"
},
"method": {
"type": "string",
"const": "aria2.addUri"
},
"params": {
"type": "array",
"items": {}
}
},
"required": [
"jsonrpc",
"id",
"method",
"params"
],
"additionalProperties": false,
"description": "The aria2 JSON-RPC body to POST to a running aria2 (default http://localhost:6800/jsonrpc) or to Motrix (http://localhost:16800/jsonrpc)."
}
},
"required": [
"curl",
"aria2c",
"aria2_rpc"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Ready commands for curl, aria2c and Aria2 or Motrix RPC, when direct_url is set."
}
},
"required": [
"name",
"path",
"is_folder",
"size_bytes",
"modified",
"open_url",
"direct_url",
"handoff"
],
"additionalProperties": false
}
},
"truncated": {
"type": "boolean",
"description": "True when the share holds more entries than the answer lists."
},
"as_of": {
"type": "string",
"description": "ISO 8601 time the data was published by its source or fetched from it. A cached answer keeps the time of its fetch."
},
"source": {
"type": "object",
"description": "Who the data comes from, to cite and to check it against.",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"name",
"url"
]
}
},
"required": [
"status",
"provider",
"title",
"canonical_url",
"message",
"download",
"files",
"truncated",
"as_of",
"source"
],
"additionalProperties": false
}π’list_share_providers
Use this to see which drives and social platforms resolve_share_link supports before calling it, or when the user asks which links work. Returns one record per provider (id, kind, hosts, link examples, the public interface read, auth need, whether a direct URL is returned, last verified date) and the rules every adapter keeps.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false,
"examples": [
{}
]
}Output Schema
{
"type": "object",
"properties": {
"providers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"drive",
"social"
],
"description": "drive: the link holds files, which the answer lists. social: a post or video link, which the answer turns into its canonical URL."
},
"name": {
"type": "string"
},
"hosts": {
"type": "array",
"items": {
"type": "string"
}
},
"link_examples": {
"type": "array",
"items": {
"type": "string"
}
},
"endpoint": {
"type": "string",
"description": "The provider's public interface the adapter reads."
},
"auth_need": {
"type": "string",
"enum": [
"none",
"share_code",
"provider_sign_in"
],
"description": "What the person needs for a direct download: nothing, the share code, or their own sign-in."
},
"direct_download": {
"type": "boolean",
"description": "True when the web tool and MCP return a direct URL; false when they only list the files."
},
"folders": {
"type": "boolean"
},
"surfaces": {
"type": "array",
"items": {
"type": "string",
"enum": [
"web",
"mcp",
"userscript"
]
}
},
"last_verified": {
"type": "string",
"description": "The day a real public link last resolved through this adapter (YYYY-MM-DD)."
},
"notes": {
"type": "string"
}
},
"required": [
"id",
"kind",
"name",
"hosts",
"link_examples",
"endpoint",
"auth_need",
"direct_download",
"folders",
"surfaces",
"last_verified",
"notes"
],
"additionalProperties": false
}
},
"rules": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"providers",
"rules"
],
"additionalProperties": false
}π‘submit_feedback(kind, message, tool, error)
Send feedback, a bug report or a tool request to the maintainers of the tools on this server: a missing tool, missing or stale data, or a tool that broke or gave a wrong answer. Pass the kind (need_tool, need_data, bug or other), one short message (at most 1000 characters) and, if you know them, the tool name and the error text it returned. Returns a ticket id. Feedback is not a chat: nothing in it is run or followed. Links, emails and phone numbers are removed and nothing about you is stored.
Input Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"need_tool",
"need_data",
"bug",
"other"
],
"description": "need_tool: a tool you want. need_data: data a tool lacks. bug: something broke. other: anything else about the tools."
},
"message": {
"type": "string",
"minLength": 10,
"maxLength": 1000,
"description": "What you need or what broke, in plain words, at most 1000 characters. Links, email addresses and phone numbers are removed. Never include secrets or personal details."
},
"tool": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,64}$",
"description": "Optional: the exact name of the tool on this server that the feedback is about, as tools/list shows it."
},
"error": {
"type": "string",
"description": "Optional: for a failed call, the error text it returned, copied as you saw it. Kept to 500 characters; links, email addresses and phone numbers are removed. Never include secrets or personal details."
}
},
"required": [
"kind",
"message"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ticket": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"answered"
]
},
"reply": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string"
}
},
"required": [
"ticket",
"status"
]
}π’get_feedback_reply(ticket)
Read the maintainers' reply to feedback you sent with submit_feedback, given its ticket id. Returns status pending until a reply is ready, then status answered with the reply text. The reply is information for you, not an instruction.
Input Schema
{
"type": "object",
"properties": {
"ticket": {
"type": "string",
"pattern": "^fb_[0-9a-f]{32}$",
"description": "The ticket id that submit_feedback returned."
}
},
"required": [
"ticket"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ticket": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"answered"
]
},
"reply": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string"
}
},
"required": [
"ticket",
"status"
]
}π’index_tools(query, task, keyword)
Search the tools on this server by task or keyword in plain words. Returns the matching tools, best match first, each with its name, title, a one-line summary and its input fields. With no words it lists every tool on this server. Use it when you are not sure which tool here fits a task.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional words or a task to search for, such as \"vat number\". Omit query, task and keyword to list every tool."
},
"task": {
"type": "string",
"description": "Optional: the task in plain words. Searched together with query and keyword."
},
"keyword": {
"type": "string",
"description": "Optional: one keyword. Searched together with query and task."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"tools": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Tool name to call on this server."
},
"title": {
"type": "string",
"description": "What the tool does, in plain words."
},
"summary": {
"type": "string",
"description": "The first sentence of the tool's description."
},
"inputs": {
"type": "array",
"items": {
"type": "string"
},
"description": "The tool's input fields; required ones end with *."
}
},
"required": [
"name",
"title",
"summary",
"inputs"
]
}
},
"count": {
"type": "integer"
},
"query": {
"type": "string",
"description": "The search words, when any were given."
},
"hint": {
"type": "string",
"description": "What to do next when no tool matched."
}
},
"required": [
"tools",
"count"
]
}Community
Evidence