Skip to content

Add Zenrows plugin - #1706

Open
tedi-z wants to merge 1 commit into
xai-org:mainfrom
ZenRows:feat/add-zenrows-plugin
Open

tedi-z wants to merge 1 commit into
xai-org:mainfrom
ZenRows:feat/add-zenrows-plugin

Conversation

@tedi-z

@tedi-z tedi-z commented Oct 27, 2026

Copy link
Copy Markdown

What this PR does

Zenrows gives Grok live web data: fetch a page as markdown, pull structured fields from it, run batch jobs over many URLs, crawl from a start page, and drive a hosted browser for pages that need clicks, logins or pagination.

Ownership

  • I own this plugin or have the right to distribute it.
  • The source repo is published under our official org.

Checklist

  • Added exactly one entry to .grok-plugin/marketplace.json (valid JSON, kebab-case name).
  • Remote source pins a full 40-char lowercase commit sha, public and reachable.
  • Regenerated .grok-plugin/plugin-index.json.
  • python3 scripts/validate-catalog.py passes locally.
  • python3 scripts/generate-plugin-index.py --check passes locally.
  • homepage + clear description set.
  • License is stated (MIT, in the manifest and LICENSE).

Security

  • No curl | bash, remote-code download/exec, or postinstall RCE.
  • No reading/exfiltration of secrets, tokens, .env, or env vars.
  • Hooks and MCP scope are least-privilege.

Network endpoints this plugin calls (and why):

  • mcp.zenrows.com — the hosted MCP server itself, over HTTP. Every tool call goes here.
  • app.zenrows.com — OAuth only: authorization, token exchange and dynamic client registration.

Pages the user asks for are fetched by Zenrows, so the plugin makes no direct request to the target site.

Credentials/permissions it requires (and why):

An OAuth token for the user's Zenrows account, scope api, obtained through the browser flow on first connection and stored by Grok in ~/.grok/mcp_credentials.json. The plugin never reads or writes that file.

No API key, no environment variables, no hooks, and no code Grok runs. What Grok loads is a .mcp.json pointing at the hosted server plus nine Markdown skills. The repository also carries scripts/validate-plugin.py, a development-time check run by our own CI; Grok neither loads nor executes it.

Two skills suggest saving large result sets under ./.zenrows/ in the working directory, and only when the user asked for the data. Grok's own file-write permissions apply.

Notes for reviewers

Submitted by the Zenrows team (contact: success@zenrows.com).

We ran both gates locally against this SHA: validate-catalog.py and generate-plugin-index.py --check both pass, and the diff is additive only (63 insertions, 0 deletions).

We also installed and exercised the plugin end to end in Grok Build 1.0.70:

  • grok plugin install ZenRows/grok-zenrows@v0.1.2 --trust
  • /skills lists the nine zenrows-* skills; /mcps shows the server ready
  • OAuth completes in the browser and the token is stored
  • Read a page: scrape returned the four out-of-stock products on a test catalog
  • Structured fields: extract returned the 16 products and prices on page 1, without paging further
  • Browser: browser_navigate → browser_get_accessibility_tree → browser_batch → browser_close found a price behind a "Load more" click
  • Negative control: an unrelated prompt triggered no Zenrows call

Skill names carry a zenrows- prefix because Grok loads skills from every enabled plugin into one namespace; bare names like batch or map would collide with plugins already in this catalog.

@tedi-z
tedi-z requested a review from a team October 27, 2026 17:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant