mirror of
https://github.com/andrewyng/openworker.git
synced 2026-08-30 22:53:41 +00:00
Merge 42b19ac002 into 9e145d9ceb
This commit is contained in:
@@ -51,6 +51,10 @@ ABOUT: dict[str, str] = {
|
||||
"aggregate board data, create items, and post updates. One-click sign-in "
|
||||
"runs entirely on this computer against monday.com's own agent service; agents "
|
||||
"get a small curated set of its tools, never the full catalog.",
|
||||
"tinyfish": "Give your coworker live web access via TinyFish — search the "
|
||||
"web, fetch clean page content, run web-agent automations, and drive remote "
|
||||
"browsers. One-click OAuth sign-in runs on this Mac against TinyFish's hosted "
|
||||
"service; agents get a small curated set of its tools, never the full catalog.",
|
||||
"asana": "Keep up with your Asana work — search and read tasks and "
|
||||
"projects, create tasks, and comment. Connects with a personal access "
|
||||
"token from the Asana developer console.",
|
||||
@@ -108,6 +112,11 @@ ACCESS: dict[str, list[str]] = {
|
||||
"Reads boards, items, and updates your account can see.",
|
||||
"Creates items, changes item values, and posts updates as you.",
|
||||
],
|
||||
"tinyfish": [
|
||||
"Searches the web and reads clean content from pages.",
|
||||
"Runs web-agent automations — navigates sites, clicks, fills forms, and extracts data as you.",
|
||||
"Opens and manages remote browser sessions for direct control.",
|
||||
],
|
||||
"asana": [
|
||||
"Reads and searches tasks your account can see.",
|
||||
"Creates tasks as you.",
|
||||
|
||||
@@ -708,6 +708,25 @@ DESCRIPTORS: list[ConnectorDescriptor] = [
|
||||
],
|
||||
available=True,
|
||||
),
|
||||
ConnectorDescriptor(
|
||||
name="tinyfish",
|
||||
title="TinyFish",
|
||||
icon="🐟",
|
||||
blurb="Search the web, fetch pages, run web agents, and drive remote browsers.",
|
||||
auth="oauth",
|
||||
two_way=False,
|
||||
# TinyFish brand orange (the site accent on tinyfish.ai); confirm vs brand guide.
|
||||
brand_color="#ff6700",
|
||||
logo="tinyfish",
|
||||
aliases=("web search", "fetch", "scrape", "browser", "web agent", "automation"),
|
||||
mcp_url="https://agent.tinyfish.ai/mcp",
|
||||
fields=[],
|
||||
instructions=[
|
||||
"One click connects via TinyFish sign-in in your browser.",
|
||||
"Sign-in is fully local — tokens stay on this Mac.",
|
||||
],
|
||||
available=True,
|
||||
),
|
||||
ConnectorDescriptor(
|
||||
name="confluence",
|
||||
title="Confluence",
|
||||
|
||||
@@ -419,6 +419,77 @@ TOOL_DEFS: tuple[ConnectorToolDef, ...] = (
|
||||
"write",
|
||||
"Post a comment or reply on an item.",
|
||||
),
|
||||
# -- TinyFish (MCP-backed only; pinned subset of TinyFish's automation catalog).
|
||||
# NOTE / follow-up (PROD-4064): this list is HAND-MAINTAINED, so it can drift from
|
||||
# what agent.tinyfish.ai/mcp actually serves. Deliberately omitted for v1: the
|
||||
# batch_* tools, the *_usage listing tools, and the non-public deep-research pair
|
||||
# (run_big_search / get_search_result). Any tool TinyFish adds or renames won't
|
||||
# appear here until this block is updated by hand. Revisit if a task needs those.
|
||||
# Names are `mcp__tinyfish__<tool>` exactly as mcp/tools.py builds them; unlisted
|
||||
# vendor tools never reach a session.
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__search",
|
||||
"Web search",
|
||||
"read",
|
||||
"Search the web for titles, snippets, and URLs.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__fetch_content",
|
||||
"Fetch page",
|
||||
"read",
|
||||
"Fetch clean, extracted content from up to 10 URLs.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__run_web_automation",
|
||||
"Run web agent",
|
||||
"write",
|
||||
"Run a multi-step web automation from a URL and a natural-language goal.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__run_web_automation_async",
|
||||
"Run web agent (async)",
|
||||
"write",
|
||||
"Start a web automation and return a run id to poll.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__get_run",
|
||||
"Read run",
|
||||
"read",
|
||||
"Read the status and result of an automation run.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__list_runs",
|
||||
"List runs",
|
||||
"read",
|
||||
"List automation runs.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__cancel_run",
|
||||
"Cancel run",
|
||||
"write",
|
||||
"Cancel a running or pending automation run.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__create_browser_session",
|
||||
"Open browser session",
|
||||
"write",
|
||||
"Create a remote browser session for direct control.",
|
||||
),
|
||||
ConnectorToolDef(
|
||||
"tinyfish",
|
||||
"mcp__tinyfish__list_browser_sessions",
|
||||
"List browser sessions",
|
||||
"read",
|
||||
"List your remote browser sessions.",
|
||||
),
|
||||
# -- asana via their hosted V2 MCP server (one-click path; the asana_* REST
|
||||
# tools below stay the manual-token set — profile mode picks, as with jira) ---
|
||||
ConnectorToolDef(
|
||||
|
||||
@@ -133,6 +133,22 @@ const MondayLogo = strokeLogo(
|
||||
</>,
|
||||
);
|
||||
|
||||
// TinyFish's official fish icon (ux-labs docs/logo — black monochrome master
|
||||
// "TF_ICON BLK1.svg"): a single even-odd path, so it's one color that ConnectorIcon tints
|
||||
// with brand_color (#ff6700), and the eyes + body read as negative space. 440x406 source viewBox.
|
||||
const TinyFishLogo: LogoComponent = () => (
|
||||
<svg
|
||||
viewBox="0 0 440 406"
|
||||
width="100%"
|
||||
height="100%"
|
||||
fill="currentColor"
|
||||
fillRule="evenodd"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<path d="M202.22 0.06C206.48 0.06 210.73 0.06 214.99 0.06C216.01 1.28 218.6 0.91 220.11 1.3C224.21 2.35 228.15 3.59 232.07 5.14C244.96 10.25 258.07 17.26 269.54 25.13C283.96 35.03 297.37 45.85 309.93 58.08C313.93 61.97 318.01 66.07 321.67 70.27C323.86 72.78 326.47 77.14 329.36 78.8C331.48 80.02 334.31 80.37 336.61 81.23C341.54 83.08 346.63 84.97 351.36 87.28C366.02 94.41 378.91 103.3 391.73 113.31C409.64 127.3 423.14 148.38 431.77 168.96C434.48 175.45 437.01 183.1 437.97 190.1C438.26 192.21 438.4 198.74 439.94 199.95C439.94 209.61 439.94 219.27 439.94 228.94C438.66 230.15 439.06 232.8 438.77 234.46C437.99 238.98 437.02 243.58 435.77 247.97C432.37 259.93 427.09 271.28 420.72 281.96C407.79 303.66 388.19 321.9 366.57 334.72C360.94 338.06 355.01 341.2 349.02 343.8C346.12 345.07 341.96 345.81 339.44 347.73C338.3 348.59 331.82 361.88 329.78 364.72C317.3 382.1 289.82 401.83 267.45 393.88C263.57 392.5 259.66 389.71 257.26 386.33C255.92 384.43 255.27 381.38 253.39 380.11C245.17 389.31 233.3 396.43 221.9 400.8C217.47 402.49 212.85 403.83 208.21 404.81C206.69 405.13 204.04 404.71 203.02 405.97C198.37 405.97 193.72 405.97 189.07 405.97C187.53 404.34 183 404.55 180.81 403.8C176.02 402.18 171.53 399.68 167.58 396.52C153.91 385.56 152.42 366 159.19 350.8C161.08 346.54 163.47 342.28 166.14 338.46C167.77 336.13 170.39 333.96 171.46 331.35C168.52 328.05 155.93 321.21 151.32 317.81C143.24 311.86 135.31 305.22 128.21 298.09C125.27 295.14 122.55 291.84 119.46 289.08C115.24 292.67 112.37 298.46 108.79 302.72C101.67 311.21 93.65 319.19 84.66 325.72C63.52 341.06 21.37 351.03 9.18 319.4C7.26 314.41 6.38 308.51 6.17 303.18C5.43 284.18 11.11 263.87 18.24 246.52C20.54 240.93 22.53 235.01 25.27 229.62C26.3 227.61 28.95 223.62 28.83 221.36C28.66 218.22 20.87 203.57 19.18 199.44C11.33 180.28 3.94 160 1.87 139.14C0.85 128.87 0.41 117.55 5.26 108.12C12.15 94.74 27.67 91.47 41.49 93.83C64.1 97.7 83.3 113.87 96.76 131.92C100.56 137.01 104.5 142.09 107.8 147.53C108.98 149.47 110.05 152.12 111.74 153.63C114.58 152.92 122.46 142.01 125.2 139.28C132.58 131.92 140.21 124.56 148.5 118.21C153.19 114.62 158.44 111.43 162.83 107.49C157.08 90.84 145.97 62.26 168.21 52.25C173.85 49.72 179.58 50.02 185.54 49.21C185.24 45.51 182.26 41.55 181.15 37.92C178.06 27.75 178.91 14.77 187.27 7.23C189.64 5.09 192.66 3.16 195.69 2.13C197.32 1.58 201.27 1.37 202.22 0.06ZM303.64 71.98C302.39 68.63 291.03 59.35 287.75 56.73C269.7 42.26 250.7 30.69 229.26 22.21C222.6 19.57 200.46 12.71 199.12 24.51C203.69 27.57 209.78 28.96 214.78 31.26C226.34 36.58 237.73 42.39 248.46 49.31C254.08 52.93 259.68 56.84 264.73 61.23C266.79 63.03 271.74 69.02 273.91 69.76C276.67 70.71 290.88 70.72 295.21 71.22C297.82 71.52 301.18 72.78 303.64 71.98ZM276.96 87.01C273.79 87.3 269.56 90.2 266.74 91.69C258.26 96.18 250.17 100.98 242.53 106.88C198.49 140.91 182.56 198.1 196.16 251.43C199.86 265.92 205.82 279.64 213.22 292.61C214.82 295.4 217.12 300.77 219.76 302.64C221.85 304.11 225.3 303.21 225.99 306.78C227.15 312.82 218.08 316.26 214.15 319.33C203.64 327.56 192.3 336.52 185.73 348.41C184.15 351.28 179.72 356.82 180.34 360.27C180.95 363.61 190.96 368.84 193.93 369.83C216.96 377.5 245.82 354.54 254.71 334.39C256.79 329.66 258.53 323.95 258.03 318.7C257.92 317.51 257.12 316.72 257.09 315.53C257.05 313.66 258.32 312.16 259.98 311.5C265.95 309.1 266.76 319.69 269.72 321.75C274.1 324.81 289.05 327.28 294.6 327.86C305.92 329.03 319.37 330.9 330.56 328C351.45 322.57 380.34 303.8 394.78 287.66C406.45 274.61 415.35 260.08 420.83 243.45C423.88 234.22 424.76 224.47 425.18 214.79C427.84 152.61 373.73 107.95 318.76 92.84C307.31 89.69 288.71 85.94 276.96 87.01ZM89.74 187.46C92.03 186.59 93.17 181.07 94.15 178.89C95.4 176.12 99.38 169.34 99.25 166.54C99.13 164.07 93.74 157.36 92.21 155C81.37 138.16 66.56 121.83 47.65 114.26C41.59 111.83 30.95 109.5 25.05 113.26C20.51 116.14 19.84 134.28 21.42 138.84C24.08 135.9 25.57 132.74 29.55 131.22C35.95 128.77 44.06 132.2 49.32 135.74C62.51 144.64 72.91 157.24 80.87 170.96C82.88 174.42 87.49 185.43 89.74 187.46ZM339.23 184.68C340.37 183.83 341.75 183.53 342.68 182.3C346.32 177.46 344.04 168.75 339.29 165.36C337.58 164.14 335.91 164.3 333.99 163.84C331.38 153.13 341.05 137.22 353.3 143.24C364.89 148.93 370.39 163.38 371.66 175.42C372.48 183.17 370.83 194.08 363.68 198.69C355.45 203.99 340.38 193.28 339.23 184.68ZM284.21 195.88C285.76 194.37 287.79 194.04 288.8 191.7C292.32 183.45 286.82 174.75 278.46 173.88C275.72 162.82 285.08 146.58 297.83 151.2C309.09 155.28 315.95 169.65 317.84 180.61C319.52 190.34 319.55 204.99 309.82 210.83C301.02 216.1 291.45 207.81 286.78 200.89C285.76 199.38 284.29 197.7 284.21 195.88ZM292.37 247.12C294.88 246.56 297.52 247.02 300.09 246.65C306.22 245.77 312.03 244.16 317.78 241.91C327.96 237.92 337.09 230.56 347.95 228.09C353.06 226.93 364.92 223.19 366.94 231.03C369.08 239.29 362.97 247.43 358.47 253.68C350.4 264.9 336.11 276.01 322.09 277.91C306.41 280.05 297.41 271.83 293.81 257.23C293.05 254.14 291.88 250.3 292.37 247.12Z" />
|
||||
</svg>
|
||||
);
|
||||
|
||||
const AmplitudeLogo = strokeLogo(
|
||||
<>
|
||||
<path d="M2.5 13.5h4l3-8 4.5 13 3-8h4.5" />
|
||||
@@ -225,6 +241,7 @@ export const CONNECTORS: Record<string, ConnectorRegistryEntry> = {
|
||||
// No published monochrome mark — custom glyphs, tinted with the real brand color.
|
||||
attio: { label: "Attio", logo: AttioLogo },
|
||||
monday: { label: "monday.com", logo: MondayLogo },
|
||||
tinyfish: { label: "TinyFish", logo: TinyFishLogo },
|
||||
descript: { label: "Descript", logo: DescriptLogo },
|
||||
clay: { label: "Clay", logo: ClayLogo },
|
||||
close: { label: "Close", logo: CloseLogo },
|
||||
|
||||
@@ -275,3 +275,31 @@ def test_non_interactive_auth_wiring_refuses_the_browser():
|
||||
chained.__cause__ = bare
|
||||
assert mcp_oauth.is_auth_required(chained)
|
||||
assert not mcp_oauth.is_auth_required(ValueError("no"))
|
||||
|
||||
|
||||
def test_tinyfish_connector_is_oauth_mcp_with_pinned_tools():
|
||||
"""TinyFish (PROD-4064): a one-click, OAuth + MCP-backed connector that pins a
|
||||
curated subset spanning all four TinyFish families (search, fetch, agent,
|
||||
browser), with action-taking tools classified `write` so they gate for approval."""
|
||||
d = {x.name: x for x in list_descriptors()}["tinyfish"]
|
||||
assert d.auth == "oauth"
|
||||
assert d.mcp_url == "https://agent.tinyfish.ai/mcp"
|
||||
assert d.fields == [] # one-click: no API key box is shown
|
||||
assert not d.managed # local OAuth flow (tokens on this Mac), not cloud-brokered
|
||||
|
||||
pins = {t.name: t.kind for t in mcp_tool_defs("tinyfish")}
|
||||
# all four families represented
|
||||
assert "mcp__tinyfish__search" in pins # search
|
||||
assert "mcp__tinyfish__fetch_content" in pins # fetch
|
||||
assert "mcp__tinyfish__run_web_automation" in pins # agent
|
||||
assert "mcp__tinyfish__create_browser_session" in pins # browser
|
||||
# read-only lookups stay read; action-taking tools are write (→ approval-gated)
|
||||
assert pins["mcp__tinyfish__search"] == "read"
|
||||
assert pins["mcp__tinyfish__fetch_content"] == "read"
|
||||
assert pins["mcp__tinyfish__run_web_automation"] == "write"
|
||||
assert pins["mcp__tinyfish__create_browser_session"] == "write"
|
||||
# intentionally NOT pinned in v1: batch_*, *_usage, and the non-public
|
||||
# deep-research pair (run_big_search / get_search_result).
|
||||
assert not any("batch_" in n or n.endswith("_usage") for n in pins)
|
||||
assert "mcp__tinyfish__run_big_search" not in pins
|
||||
assert "mcp__tinyfish__get_search_result" not in pins
|
||||
|
||||
Reference in New Issue
Block a user