{
  "markdown": "<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\".github/logo-dark.svg\">\n  <source media=\"(prefers-color-scheme: light)\" srcset=\".github/logo-light.svg\">\n  <img alt=\"WebUplink\" src=\".github/logo-light.svg\" width=\"200\">\n</picture>\n\n### MCP server for WebUplink\n\n[![npm version](https://img.shields.io/npm/v/@webuplink/mcp.svg)](https://www.npmjs.com/package/@webuplink/mcp)\n[![CI](https://github.com/webuplink-dev/webuplink-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/webuplink-dev/webuplink-mcp/actions)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nGive any MCP client the ability to browse and interact with the web via [WebUplink](https://webuplink.ai).\n\n## Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"webuplink\": {\n      \"command\": \"npx\",\n      \"args\": [\"--yes\", \"--package\", \"@webuplink/mcp\", \"webuplink-mcp\"],\n      \"env\": {\n        \"WEBUPLINK_API_KEY\": \"wup_your_api_key\"\n      }\n    }\n  }\n}\n```\n\n## Cursor\n\nAdd to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"webuplink\": {\n      \"command\": \"npx\",\n      \"args\": [\"--yes\", \"--package\", \"@webuplink/mcp\", \"webuplink-mcp\"],\n      \"env\": {\n        \"WEBUPLINK_API_KEY\": \"wup_your_api_key\"\n      }\n    }\n  }\n}\n```\n\nThat's it — your AI can now browse and interact with any website.\n\n## Tools\n\n### `browse`\n\nBrowse a web page or execute tools on a page.\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `url` | string | URL to open a new browser session |\n| `session_id` | string | Existing session ID to continue browsing |\n| `tool` | string | Tool name to execute on the page |\n| `params` | object | Parameters for the tool |\n| `include_page_content` | boolean | Include detailed page content |\n\n### `close_session`\n\nClose a browser session to free resources.\n\n| Parameter | Type | Description |\n|-----------|------|-------------|\n| `session_id` | string | Session ID to close |\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `WEBUPLINK_API_KEY` | ✅ | — | Your WebUplink API key |\n| `WEBUPLINK_BASE_URL` | — | `https://api.webuplink.ai` | API base URL |\n| `PORT` | — | `3001` | Local HTTP transport port |\n| `MCP_HTTP_HOST` | — | `127.0.0.1` | Local HTTP transport bind address |\n| `MCP_HTTP_ALLOWED_HOSTS` | non-loopback HTTP only | loopback names | Comma-separated Host/Origin names accepted by the HTTP boundary |\n\n## HTTP Transport\n\nFor a local Streamable HTTP endpoint, invoke the HTTP binary explicitly:\n\n```bash\nWEBUPLINK_API_KEY=wup_... npx --yes --package @webuplink/mcp webuplink-mcp-http\n```\n\nThe server accepts stateless MCP `POST` requests at `/mcp` and listens on\n`127.0.0.1:3001` by default. Set `PORT` to change the port.\n\nBinding to a non-loopback interface is an explicit opt-in:\n\n```bash\nWEBUPLINK_API_KEY=wup_... MCP_HTTP_HOST=0.0.0.0 \\\n  MCP_HTTP_ALLOWED_HOSTS=mcp.internal.example \\\n  npx --yes --package @webuplink/mcp webuplink-mcp-http\n```\n\nThe listener rejects missing or unlisted `Host` headers before allocating MCP\nresources and applies the same allowlist to browser `Origin` headers. This\nprotects the loopback default from DNS rebinding; it is not client\nauthentication. Every accepted request still uses the single configured\n`WEBUPLINK_API_KEY`, so do not expose the listener directly to an untrusted\nnetwork. Put an authenticated boundary in front of it for controlled remote use.\n\n## License\n\nMIT\n",
  "bytes": 3502,
  "sha": "e765909e49cb3bb331001bb268459964def030c3e5ec99ffbace70c252a16b7f",
  "repo_slug": "webuplink-dev/webuplink-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_webuplink_mcp_44fa057b/readme"
}