Guion Web MCP server

Guion Web MCP server

Enables web research through multi-provider search, documentation lookup, public code search, and clean Markdown extraction from static or JavaScript-rendered pages via five read-only tools.

Category
访问服务器

README

Guion Web

Guion Web is a Node.js web research toolkit. It provides Exa or Brave search, Context7 library documentation lookup, Sourcegraph public code search, and two page-fetch backends through a CLI, stdio MCP server, Pi extension, and DeepSeek Harness (DSH) integration: direct HTML-to-Markdown extraction and explicit agent-browser rendering for client-rendered pages on supported hosts.

Install and configure

Node.js 20 or later is required. @guionai/web intentionally exposes only its web executable and stdio MCP server; it does not provide a root JavaScript or TypeScript SDK. Use the Pi or DSH packages for those host integrations.

npm install --global @guionai/web
# or run without a global install
npx @guionai/web --help

Search needs one provider credential. If both are present, Exa is selected by default; select a provider explicitly with --provider exa or --provider brave. Context7 works anonymously when its key is absent.

export EXA_API_KEY="..."
# or
export BRAVE_API_KEY="..."
# optional, for authenticated Context7 requests
export CONTEXT7_API_KEY="..."

Do not put credentials in command arguments or commit them. The CLI reads these environment variables directly; it does not load a dotenv file or an older application configuration path.

CLI

web has human-readable output by default. Add --json for exactly one JSON document on stdout, which is useful for automation.

web search --provider exa -- "Node AbortSignal"
web fetch https://example.com/article --tree
web fetch https://example.com/article --section introduction
web docs resolve react
web docs fetch /facebook/react --topic hooks --tokens 2000
web sgraph --count 10 -- "repo:^github\\.com/nodejs/node$ AbortSignal"

Use -- before a search or Sourcegraph query that begins with a hyphen. fetch supports --full, --tree, and --section; long extracted documents default to a heading tree so a later request can retrieve a stable section ID.

MCP

Run the stdio server with the same credential environment:

web mcp
# Pin search selection for the lifetime of this MCP process:
web mcp --provider brave

The server exposes five read-only tools: search, fetch, docs_resolve, docs_fetch, and source_search. Its stdout is reserved for MCP protocol messages; diagnostics go to stderr. For a client-rendered page, explicitly call fetch with render: "agent-browser" and an integer waitMs; this optional retry requires a host-installed executable and never happens automatically.

Pi

Install the independently bundled Pi extension:

pi install npm:@guionai/pi-web

It registers web_search, web_fetch, web_docs, and web_source_search and calls the bundled core in-process. Pi and TypeBox are peer dependencies supplied by the host; no CLI executable or MCP configuration is required. web_fetch uses direct fetch by default and can explicitly use render: "agent-browser" with an integer waitMs when its host provides that optional executable.

DSH

Install the DSH bundle in the existing Web profile:

dsh plugin --profile web add @guionai/dsh-web

The included profile patch routes stock PTC web search through the selected Exa or Brave provider. Its settings UI stores provider selection and manages namespaced write-only credentials. Fetch, documentation, and Sourcegraph tools also run in-process. The host DSH packages and React are peers supplied by DSH. web_fetch uses direct fetch by default and can explicitly use render: "agent-browser" with an integer waitMs on a host that supplies the optional executable.

Page-fetch backends

web fetch has two backends. fetch (the default) uses Node fetch, linkedom, and Defuddle for direct HTML-to-Markdown extraction from static, SSR, and pre-rendered pages. agent-browser renders client-side pages through a separately installed host executable. Direct fetch is used by default; choose agent-browser explicitly when needed. The implementation never falls back automatically:

web fetch https://example.com/app --render=agent-browser --wait=2000
# If it is still incomplete, retry explicitly with more time, or abandon it:
web fetch https://example.com/app --render=agent-browser --wait=10000

--wait is mandatory with --render=agent-browser, including --wait=0, and accepts only an integer from 0 through 30,000 milliseconds. Direct fetch requests must not provide --wait. The same render: "agent-browser" and required waitMs fields are available on the MCP fetch, Pi web_fetch, and DSH web_fetch tools. A direct-fetch failure may return the structured javascript_rendering_may_be_required hint with the 2,000 ms suggestion; the agent decides whether to retry with a longer wait or abandon the page.

Rendering is an optional host capability. If you choose to use it, install agent-browser separately on the host:

npm install --global agent-browser
agent-browser install

agent-browser install manages its own browser runtime; Guion packages never run it, bundle it, or reuse browser credentials. A compatible executable must be directly runnable from PATH without a shell. The renderer is supported on macOS and Linux hosts. Direct fetch remains available, and the three npm packages remain installable when agent-browser is absent.

A rendered session is fresh and non-persistent. Before launch, the target must be an HTTP(S) public hostname or address. The browser allowlist then contains only the requested hostname, *.<requested-hostname> (the target and its subdomains), and this fixed common-CDN set:

  • cdn.jsdelivr.net
  • unpkg.com
  • cdnjs.cloudflare.com
  • ajax.googleapis.com
  • fonts.googleapis.com
  • fonts.gstatic.com
  • esm.sh

The caller cannot widen this list. Redirects, APIs, frames, workers, sockets, or other dependencies on unknown domains fail closed as render_domain_not_allowed; increasing waitMs will not help. Report a likely missing first-party or common-CDN domain at https://github.com/guionai/web/issues/new, including the page URL and blocked domain. Do not include credentials or page secrets in an issue.

This is a browser-level hostname boundary, not complete SSRF protection or a host egress firewall. Literal and DNS-resolved private/reserved targets are rejected before launch, but an allowlisted malicious hostname can change its DNS answer to a private address after validation (DNS rebinding), and there is no operating-system host-egress isolation here. Do not use this backend for arbitrary untrusted URLs in a public or multi-tenant service without a per-connection SSRF-filtering proxy or container/microVM egress isolation.

Development

This is a pnpm workspace. Install dependencies and run the same local gates used by CI:

pnpm install --frozen-lockfile
pnpm format:check
pnpm typecheck
pnpm build
pnpm test
pnpm test:release
pnpm test:pack

test:release uses disposable manifests to exercise tag-version synchronization. test:pack runs each public package's packed installation or host-loading contract in test-owned temporary directories.

Releases

A v<semver> tag is the release source of truth for all three public packages: @guionai/web, @guionai/pi-web, and @guionai/dsh-web. The release preflight synchronizes its checkout manifests from that tag, then completes formatting, typechecking, build, tests, release-version checks, and packed smoke tests before any publication begins.

Three independent, non-fail-fast protected npm Environment matrix cells then publish one package each through npm Trusted Publishing with provenance. The synchronized version selects npm's latest tag for stable SemVer and beta for a prerelease. After all three cells succeed, the workflow creates the GitHub release with generated notes and source archives. It publishes no binaries or platform archives.

If publication partially fails, use GitHub Actions Re-run failed jobs. Never use Re-run all jobs: npm versions are immutable, so the jobs that already published successfully must not run again.

First beta bootstrap and Trusted Publishing

Do this once after the release commit is merged, before enabling routine OIDC releases:

  1. Check out a clean intended release commit and choose a synchronized beta version such as 0.1.0-beta.1.
  2. With a maintainer npm account that has @guionai publish permission and 2FA, run node scripts/sync-version.mjs 0.1.0-beta.1, then run the build, test, pack, and node scripts/release-dry-run.mjs 0.1.0-beta.1 gates.
  3. From each public package directory, publish the synchronized beta with npm publish --access public --tag beta. This bootstrap is authenticated by the maintainer; do not pass provenance outside the GitHub OIDC release job.
  4. In npm package settings, create one GitHub Trusted Publisher relationship for each of @guionai/web, @guionai/pi-web, and @guionai/dsh-web. Each must target repository guionai/web, workflow .github/workflows/release.yaml, and the protected npm Environment.
  5. Verify all three relationships and npm publishing-access policies in npm, then enable/tag the routine release workflow. It uses GitHub OIDC with no npm token and requests provenance for every normal publication.

Never overwrite or unpublish a version. For a partial GitHub release, rerun only its failed publish cells.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选