From aec5b5cec99cec55b85f7dec4e64d3ed4f59a7ce Mon Sep 17 00:00:00 2001 From: Minu Palaniappan Date: Fri, 25 Sep 2026 10:17:55 -0700 Subject: [PATCH] feat(third_party): add TinyFish plugin URL-only plugin for TinyFish's hosted MCP (https://agent.tinyfish.ai/mcp): web automation, web search, content extraction, and remote browser sessions. OAuth via TinyFish's Clerk authorization server with PKCE and dynamic client registration; registration verified to accept every Cursor redirect set, including Grok Bot mobile and grok.com. --- .cursor-plugin/marketplace.json | 5 ++ .../tinyfish/.cursor-plugin/plugin.json | 36 ++++++++++ third_party/tinyfish/CHANGELOG.md | 9 +++ third_party/tinyfish/LICENSE | 21 ++++++ third_party/tinyfish/README.md | 64 ++++++++++++++++++ third_party/tinyfish/assets/logo.png | Bin 0 -> 13469 bytes third_party/tinyfish/mcp.json | 8 +++ 7 files changed, 143 insertions(+) create mode 100644 third_party/tinyfish/.cursor-plugin/plugin.json create mode 100644 third_party/tinyfish/CHANGELOG.md create mode 100644 third_party/tinyfish/LICENSE create mode 100644 third_party/tinyfish/README.md create mode 100644 third_party/tinyfish/assets/logo.png create mode 100644 third_party/tinyfish/mcp.json diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index 1f2131732..052ee8f68 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -462,6 +462,11 @@ "grokbot": "0.49.0", "sand": "0.49.0" } + }, + { + "name": "tinyfish", + "source": "third_party/tinyfish", + "description": "Browse and automate the web with TinyFish: run multi-step web automations, search the web, extract clean page content, and drive remote stealth browser sessions." } ] } diff --git a/third_party/tinyfish/.cursor-plugin/plugin.json b/third_party/tinyfish/.cursor-plugin/plugin.json new file mode 100644 index 000000000..97b3286dd --- /dev/null +++ b/third_party/tinyfish/.cursor-plugin/plugin.json @@ -0,0 +1,36 @@ +{ + "name": "tinyfish", + "displayName": "TinyFish", + "version": "1.0.0", + "minClientVersions": { + "cursor": "3.13.0" + }, + "description": "Browse and automate the web with TinyFish: run multi-step web automations, search the web, extract clean page content, and drive remote stealth browser sessions.", + "author": { + "name": "Cursor", + "email": "plugins@cursor.com" + }, + "homepage": "https://docs.tinyfish.ai/mcp-integration", + "repository": "https://github.com/cursor/plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "tinyfish", + "web automation", + "browser agent", + "web search", + "scraping", + "content extraction", + "browser sessions", + "playwright", + "mcp" + ], + "category": "integrations", + "tags": [ + "tinyfish", + "web", + "automation", + "mcp" + ], + "mcpServers": "./mcp.json" +} diff --git a/third_party/tinyfish/CHANGELOG.md b/third_party/tinyfish/CHANGELOG.md new file mode 100644 index 000000000..f6dc437f0 --- /dev/null +++ b/third_party/tinyfish/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +All notable changes to this plugin will be documented here. + +## 1.0.0 — initial release + +- Added the `tinyfish` MCP server pointing at TinyFish's hosted Streamable HTTP endpoint (`https://agent.tinyfish.ai/mcp`). +- Auth uses OAuth with TinyFish user login (PKCE, dynamic client registration via `clerk.tinyfish.ai`) — no API key or client ID to configure. Registration was verified to accept every Cursor redirect set, including Grok Bot mobile. +- Logo: TinyFish's official fish mark, from the app icon published on tinyfish.ai, on a 192×192 tile. diff --git a/third_party/tinyfish/LICENSE b/third_party/tinyfish/LICENSE new file mode 100644 index 000000000..ca2bba771 --- /dev/null +++ b/third_party/tinyfish/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Cursor + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/tinyfish/README.md b/third_party/tinyfish/README.md new file mode 100644 index 000000000..c10c804ba --- /dev/null +++ b/third_party/tinyfish/README.md @@ -0,0 +1,64 @@ +# TinyFish + +Cursor plugin that connects agents to [TinyFish](https://www.tinyfish.ai) through TinyFish's official remote [Model Context Protocol](https://modelcontextprotocol.io/) server. + +Run multi-step web automations from a URL and a natural-language goal, search the web, extract clean content from pages, and open remote stealth browser sessions for direct Playwright, Puppeteer, or Selenium control. + +## Install + +1. Open **Cursor Settings → Plugins**. +2. Search for **TinyFish**. +3. Click **Install**, then complete the TinyFish sign-in prompt. + +Or run `/add-plugin tinyfish` in chat. + +## MCP + +```json +{ + "mcpServers": { + "tinyfish": { + "type": "http", + "url": "https://agent.tinyfish.ai/mcp" + } + } +} +``` + +Auth is OAuth. Cursor prompts for TinyFish sign-in when the plugin connects — there is no client ID or API key to configure. Each user signs in with their own TinyFish account. + +## Before you connect + +You need a TinyFish account ([sign up](https://agent.tinyfish.ai/api-keys)). Search and content extraction are free; web automation and browser sessions draw from your TinyFish wallet (plan credits on legacy accounts). See [Rates](https://docs.tinyfish.ai/mcp-integration#rates) for current pricing. + +## What agents can do + +| Category | Capabilities | +| --- | --- | +| Web automation | `run_web_automation` executes a multi-step task on a site from a URL and a goal (clicking, navigating, forms, logins) and streams progress; `run_web_automation_async` returns a `run_id` for long tasks, with `get_run`, `list_runs`, and `cancel_run` to follow up. Saved Browser Context Profiles (`use_profile`, `profile_id`) reuse login state for recurring authenticated workflows | +| Batch automation | `batch_status` and `batch_cancel` check or cancel up to 8 runs at once | +| Web search | `search` returns structured results with filters for recency, date range, domain type (web, news, research paper), location, language, and domain allow/deny lists; `get_search_usage` lists past searches | +| Content extraction | `fetch_content` renders and extracts clean Markdown, HTML, or JSON from up to 10 URLs per call, with CSS selector scoping and conditional-request support; `list_fetch_usage` lists past fetches | +| Browser sessions | `create_browser_session` opens a remote stealth Chrome session and returns CDP connection details; `list_browser_sessions` and `close_browser_session` manage them | +| Wallet | `get_wallet` reads balance, auto-reload state, and per-product rates (read-only) | + +The hosted runtime is the source of truth for tool names and schemas. + +## Notes + +- Web automations act on real websites with your saved profiles and credentials when you enable them. Review the goal before letting the agent run tasks that log in, submit forms, or make purchases. +- Sites with bot protection may need the `stealth` browser profile; complex automations can take 30–60 seconds. +- Runs and browser minutes are billed to your TinyFish wallet; `get_wallet` shows the current balance and rates. + +## Docs + +- MCP integration guide: https://docs.tinyfish.ai/mcp-integration +- Plugins overview: https://docs.tinyfish.ai/plugins +- API reference: https://docs.tinyfish.ai/api-reference +- Server URL: https://agent.tinyfish.ai/mcp + +Logo is TinyFish's official mark. + +## License + +MIT diff --git a/third_party/tinyfish/assets/logo.png b/third_party/tinyfish/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d898aa4cf264a72fe0507ac32190c69578f3da1c GIT binary patch literal 13469 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 ATL1t6 literal 0 HcmV?d00001 diff --git a/third_party/tinyfish/mcp.json b/third_party/tinyfish/mcp.json new file mode 100644 index 000000000..0d0ba6ca2 --- /dev/null +++ b/third_party/tinyfish/mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "tinyfish": { + "type": "http", + "url": "https://agent.tinyfish.ai/mcp" + } + } +}