什么是 io.github.philrox/ris?
通过RIS API访问奥地利法律、法院判决及各类法律文书,便于法律检索、研究与合规分析。
README
RIS MCP Server
An MCP (Model Context Protocol) server that gives AI assistants access to Austria's official legal database — the Rechtsinformationssystem (RIS).
Ask your AI assistant about Austrian law, and it will search and retrieve legal documents directly from the official government API. No API key required.
What You Can Do
Once connected, you can ask your AI assistant things like:
"What does Austrian law say about tenancy rights?"
"Find Constitutional Court decisions on freedom of expression."
"Show me §1295 of the ABGB (Austrian Civil Code)."
"What laws about climate protection were published in 2024?"
"Look up the building code for the province of Salzburg."
"Get the full text of document NOR40052761."
The server translates these natural language requests into structured API calls against the RIS Open Government Data API.
Features
- 13 specialized tools covering all major RIS collections
- Federal law (ABGB, StGB, UGB, ...) and state law for all 9 provinces
- Court decisions from 16 court types (Supreme Court, Constitutional Court, Administrative Court, ...)
- Law gazettes — Federal (BGBl) and state (LGBl)
- Government bills, ministerial decrees, cabinet protocols
- Full document retrieval with smart prefix-based routing
- Change history tracking across 36 application types
- Interactive result list (MCP Apps) in hosts that support it — with a full text answer everywhere else
- Markdown and JSON output formats
- Free and open — uses Austria's Open Government Data API, no API key needed
Quick Start
Run directly without installation:
pnpm dlx ris-mcp-ts
Or install globally:
pnpm add -g ris-mcp-ts
Configuration
Claude Desktop
Add to your Claude Desktop config (Settings > Developer > Edit Config):
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ris": {
"command": "npx",
"args": ["-y", "ris-mcp-ts"]
}
}
}
Note: The "Add custom connector" UI in Claude Desktop only supports remote MCP servers (HTTP/SSE). Local stdio servers like this one must be configured via the JSON file.
Tip: You can also use
pnpm dlxinstead ofnpxin all configuration examples if you prefer pnpm.
Claude Code
Add to your project or user settings:
claude mcp add ris -- npx -y ris-mcp-ts
VS Code (GitHub Copilot)
Add to .vscode/mcp.json in your project:
{
"servers": {
"ris": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ris-mcp-ts"]
}
}
}
Cursor
Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global access):
{
"mcpServers": {
"ris": {
"command": "npx",
"args": ["-y", "ris-mcp-ts"]
}
}
}
Windsurf
Add to your Windsurf MCP config at ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"ris": {
"command": "npx",
"args": ["-y", "ris-mcp-ts"]
}
}
}
Other MCP Clients
Any MCP-compatible client can connect via stdio transport:
npx -y ris-mcp-ts
# or: pnpm dlx ris-mcp-ts
Available Tools
| Tool | Description |
|---|---|
ris_bundesrecht | Search federal laws (ABGB, StGB, UGB, etc.) |
ris_landesrecht | Search state/provincial laws (all 9 provinces) |
ris_judikatur | Search court decisions (16 court types) |
ris_bundesgesetzblatt | Search Federal Law Gazettes (BGBl I/II/III) |
ris_landesgesetzblatt | Search State Law Gazettes (LGBl) |
ris_regierungsvorlagen | Search government bills |
ris_dokument | Retrieve full document text by ID or URL |
ris_dokument_abschnitt | Return one section of an open document by character offset (feeds the document viewer widget) |
ris_bezirke | Search district authority announcements |
ris_gemeinden | Search municipal law and regulations |
ris_sonstige | Search miscellaneous collections (8 sub-apps) |
ris_history | Track document change history (36 app types) |
ris_verordnungen | Search state ordinance gazettes |
Interactive Result List
One widget, all eleven search tools. There is a single interactive result list, and every search tool renders into it: federal law, state law, case law, the federal and state law gazettes, government bills, district authority announcements, municipal law, the miscellaneous collections, change history and the ordinance gazettes. The screenshots below are the same widget in two different hosts, not two different features.
ris_dokument opens a reader instead. A single document can run to a quarter of a million characters, far past what one answer may carry, so the viewer loads it section by section as you scroll, offers an outline to jump by where the document has one, and links back into RIS. The full text still reaches the chat either way — the widget is never the only copy.
Hosts that support the MCP Apps extension render the hits as an interactive list — page through results without retyping the search, open a document in the browser, or request its full text with one click. The widget follows the host's light or dark theme; the shots below show both.
<table> <tr> <td width="50%"><img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/widget-in-claude.png" alt="The RIS widget running inside Claude: a connector row reading 'ris-mcp / ris_bundesrecht', below it the result list for 'Verbrauchergewährleistungsgesetz' with 40 hits and its first sections, each tagged 'Bundesrecht'." width="100%"></td> <td width="50%"><img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/widget-in-chatgpt.png" alt="The same RIS widget running inside ChatGPT: the result list for 'Verbrauchergewährleistungsgesetz' with 40 hits and its first sections, above ChatGPT's own composer with the placeholder 'ChatGPT fragen'." width="100%"></td> </tr> <tr> <td align="center"><em>In Claude</em></td> <td align="center"><em>In ChatGPT</em></td> </tr> </table> <p align="center"> <img src="https://raw.githubusercontent.com/Honeyfield-Org/ris-mcp-ts/main/docs/assets/readme-judikatur-light.png" alt="Case law search for 'Verjährung' in the light theme: 7,466 hits, with court, decision date and case number on the expanded result, the actions 'Im RIS öffnen', 'PDF' and 'Volltext in den Chat', and pagination controls at the bottom." width="820"> <br> <em>The expanded detail view, light theme — metadata, the three actions, and pagination</em> </p>Example Prompts
RIS is a German-language database, so these work best in German. Each of these lands on a different tool:
"Zeig mir das Verbrauchergewährleistungsgesetz" —
ris_bundesrecht
"Finde aktuelle OGH-Rechtsprechung zu Verjährung" —
ris_judikatur
"Was steht im Tiroler Landesrecht zum Naturschutz?" —
ris_landesrecht
"Zeig mir BGBl. I Nr. 175/2021" —
ris_bundesgesetzblatt
In a host without MCP Apps support the same prompts return the full text answer instead — see the table below.
| Host | What you get |
|---|---|
| claude.ai | Result list (pagination, document links) + document viewer (outline navigation, lazy loading) |
| ChatGPT | Result list (pagination) + document viewer (outline navigation, lazy loading) |
| Claude Code, and any client without MCP Apps support | The regular text results, unchanged |
The chat answer is always complete. The widgets are an addition to it, never a replacement — a host that does not render them loses nothing.
Tool Reference
<details> <summary><strong>ris_bundesrecht</strong> — Federal Laws</summary>Search Austrian federal laws such as ABGB, StGB, UGB, and more.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search (e.g., "Mietrecht", "Schadenersatz") |
titel | string | Search in law titles (e.g., "ABGB", "Strafgesetzbuch") |
paragraph | string | Section number (e.g., "1295" for §1295, "7" for Art 7) |
abschnitt_typ | string | Type of section paragraph refers to: "Paragraph" (default), "Artikel" (article-based laws like B-VG), "Anlage" (annex) |
applikation | string | "BrKons" (consolidated, default), "Begut" (drafts), "BgblAuth" (gazette), "Erv" (English translations) |
fassung_vom | string | Date for historical version (YYYY-MM-DD) |
seite | number | Page number (default: 1) |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" (default) or "json" |
All parameters are optional. At least one search parameter (suchworte, titel, or paragraph) should be provided.
</details> <details> <summary><strong>ris_landesrecht</strong> — State/Provincial Laws</summary>Note:
applikation="Erv"(English translations) uses a different parameter vocabulary internally (SearchTerms/Title) and does not supportparagraph/abschnitt_typorfassung_vom.
Search state laws of the nine Austrian provinces.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search |
titel | string | Search in law titles |
bundesland | string | Province: Wien, Niederoesterreich, Oberoesterreich, Salzburg, Tirol, Vorarlberg, Kaernten, Steiermark, Burgenland |
paragraph | string | Section number (e.g., "1" for §1, "7" for Art 7) |
abschnitt_typ | string | Type of section paragraph refers to: "Paragraph" (default), "Artikel", "Anlage" |
fassung_vom | string | Date for historical version (YYYY-MM-DD) |
gesetzesnummer | string | Exact law number (Gesetzesnummer) of a specific state law |
applikation | string | "LrKons" (consolidated, default) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Search court decisions from Austrian courts.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search in decisions |
gerichtsbarkeit | string | Court system / data collection to search — the RIS "Applikation" (see below; default "Justiz") |
dokumenttyp | string | "rechtssatz" (headnotes only), "entscheidungstext" (full texts only), or "beide" (both, default) |
gericht | string | Actual court within the jurisdiction (e.g., "OGH", "OLG Wien"); applies to gerichtsbarkeit="Justiz" |
rechtsgebiet | string | Broad legal area: "Zivilrecht" or "Strafrecht" (Justiz) |
fachgebiet | string | OGH subject area (e.g., "Arbeitsrecht"); Justiz, needs dokumenttyp "entscheidungstext"/"beide" |
entscheidungsart | string | Decision type (e.g., "Erkenntnis", "Beschluss"); allowed values differ by jurisdiction |
sammlungsnummer | string | Collection number: VfSlg (Vfgh) or VwSlg (Vwgh) |
norm | string | Legal norm (e.g., "1319a ABGB") |
geschaeftszahl | string | Case number (e.g., "5Ob234/20b") |
entscheidungsdatum_von | string | Decision date from (YYYY-MM-DD) |
entscheidungsdatum_bis | string | Decision date to (YYYY-MM-DD) |
sortierung | string | Sort by decision date: "datum_auf" (oldest first) or "datum_ab" (newest first) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Available gerichtsbarkeit values (16):
| Value | Court system |
|---|---|
Justiz | Supreme Court (OGH), Higher Regional Courts (OLG), Regional Courts (LG) — default |
Vfgh | Constitutional Court |
Vwgh | Supreme Administrative Court |
Bvwg | Federal Administrative Court |
Lvwg | Provincial Administrative Courts |
Dsk | Data Protection Authority |
AsylGH | Asylum Court (historical, until 2013) |
Normenliste | Index of legal norms |
Pvak | Personnel Representation Supervisory Commission |
Gbk | Equal Treatment Commission |
Dok | Disciplinary Commission |
Verg | Federal Procurement Office (historical, dissolved 2014) |
Uvs | Independent Administrative Senates (historical, dissolved 2014) |
Ubas | Independent Federal Asylum Senate (historical, dissolved 2014) |
Umse | Environmental Senate (historical, dissolved 2014) |
Bks | Federal Communications Board (historical, dissolved 2014) |
Search the Federal Law Gazette (BGBl) — official publications of federal legislation.
Inputs:
| Parameter | Type | Description |
|---|---|---|
bgblnummer | string | Gazette number (e.g., "120") |
teil | string | "1" (I = Acts), "2" (II = Regulations), "3" (III = Treaties) |
jahrgang | string | Year (e.g., "2023") |
suchworte | string | Full-text search |
titel | string | Search in titles |
applikation | string | "BgblAuth" (authentic from 2004, default), "BgblPdf" (PDF), "BgblAlt" (1945–2003) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Search State Law Gazettes (LGBl) — official publications of state legislation.
Inputs:
| Parameter | Type | Description |
|---|---|---|
lgblnummer | string | Gazette number (e.g., "50") |
jahrgang | string | Year (e.g., "2023") |
bundesland | string | Province name |
suchworte | string | Full-text search |
titel | string | Search in titles |
applikation | string | "LgblAuth" (authentic, default), "Lgbl" (general), "LgblNO" (Niederoesterreich) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Search government bills — draft legislation submitted to parliament.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search |
titel | string | Search in titles |
beschlussdatum_von | string | Approval date from (YYYY-MM-DD) |
beschlussdatum_bis | string | Approval date to (YYYY-MM-DD) |
einbringende_stelle | string | Submitting ministry (e.g., BKA, BMF, BMJ, BMK) |
im_ris_seit | string | Added recently: EinerWoche, ZweiWochen, EinemMonat, DreiMonaten, SechsMonaten, EinemJahr |
sortierung_richtung | string | Ascending or Descending |
sortierung_spalte | string | Kurztitel, EinbringendeStelle, Beschlussdatum |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Retrieve the full text of a legal document by its ID or URL. Uses a dual strategy: direct URL access first, then search API fallback.
Inputs:
| Parameter | Type | Description |
|---|---|---|
dokumentnummer | string | RIS document number (e.g., "NOR40052761") |
url | string | Direct URL to document content |
response_format | string | "markdown" (default) or "json" |
At least one of dokumentnummer or url is required. Long documents are truncated to 25,000 characters.
Supported document prefixes:
| Prefix | Type |
|---|---|
| NOR | Federal norms |
| LBG, LKT, LNO, LOO, LSB, LST, LTI, LVB, LWI | State laws (9 provinces) |
| JWR, JWT | Supreme Administrative Court (VwGH) |
| JFR, JFT | Constitutional Court (VfGH) |
| JJR, JJT | Ordinary courts (Justiz) |
| BVWG, LVWG | Federal / State Administrative Courts |
| DSB, PDK, GBK, PVAB, DKT, NL, ASYLGH | Data protection, equal treatment, personnel, disciplinary, norm lists, asylum |
| VERG, JUR, JUT, UBAS, UMSE, BKS | Historical jurisdictions (dissolved 2014) |
| BGBLA, BGBL, BGBLPDF | Federal Law Gazette (authentic / 1945–2003 / PDF) |
| REGV | Government bills |
| BVB | District authorities |
| VBL | Ordinance gazettes |
| MRP, ERL, PRUEF, AVSV, SPG, KMGER | Cabinet protocols, decrees, trade exams, social insurance, health plans, court announcements |
</details> <details> <summary><strong>ris_dokument_abschnitt</strong> — Document Section</summary>The full routing registry lives in
DOCUMENT_ROUTES(src/client.ts); unknown prefixes fall back to a Justiz search.
Return one section of a document already open in the RIS document viewer. Intended for the viewer widget, not for direct use — for the full text of a document use ris_dokument.
The tool is declared app-only (_meta.ui.visibility: ["app"]): hosts that honour the flag hide it from the model and let only the viewer widget call it. It serves the same text ris_dokument produced, from the document cache where possible, so the offsets the viewer holds address the same document.
Inputs:
| Parameter | Type | Description |
|---|---|---|
dokumentnummer | string | RIS document number of the open document - from the ris_dokument call that opened it |
url | string | Direct URL of the open document, for documents opened by URL rather than by number |
offset | number | Character offset into the document text; 0 returns the first section and the outline (default: 0) |
At least one of dokumentnummer or url is required. Each section is 25,000 characters long.
Output (structuredContent):
| Field | Type | Description |
|---|---|---|
text | string | The requested section of the document text |
total_length | number | Length of the complete document text — compare across calls to detect that the document was re-fetched and offsets shifted |
next_offset | number | null | Offset to request for the following section, or null at the end of the document |
outline | array | Jump targets of the document. Only returned for offset 0; empty when the document has no headings |
dokumentnummer | string | RIS document number of the document this section belongs to (absent for documents opened by URL) |
source_url | string | RIS URL the document text was rendered from |
Search announcements from district administrative authorities.
Note: Only available for: Niederoesterreich, Oberoesterreich, Tirol, Vorarlberg, Burgenland, Steiermark.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search |
titel | string | Search in titles |
bundesland | string | Province name |
bezirksverwaltungsbehoerde | string | District authority name |
kundmachungsnummer | string | Announcement number |
kundmachungsdatum_von | string | Date from (YYYY-MM-DD) |
kundmachungsdatum_bis | string | Date to (YYYY-MM-DD) |
im_ris_seit | string | Added recently: EinerWoche, ZweiWochen, EinemMonat, DreiMonaten, SechsMonaten, EinemJahr |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Search municipal law — local ordinances and regulations.
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search |
titel | string | Search in titles |
bundesland | string | Province name |
gemeinde | string | Municipality name (e.g., "Graz") |
applikation | string | "Gr" (municipal law, default) or "GrA" (official gazettes) |
im_ris_seit | string | Added recently |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Additional parameters depend on the selected application. See Gr (municipal law) and GrA (official gazettes) specific parameters in the source code.
Search miscellaneous legal collections and specialized databases.
Inputs:
| Parameter | Type | Description |
|---|---|---|
applikation | string | Required. Collection to search (see below) |
suchworte | string | Full-text search |
titel | string | Search in titles |
datum_von | string | Date from (YYYY-MM-DD) |
datum_bis | string | Date to (YYYY-MM-DD) |
im_ris_seit | string | Added recently |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Available collections:
| Value | Description |
|---|---|
Mrp | Cabinet protocols (Ministerratsprotokolle) |
Erlaesse | Ministerial decrees |
Upts | Party transparency reports |
KmGer | Court announcements |
Avsv | Social insurance regulations |
Avn | Veterinary notices |
Spg | Health structure plans |
PruefGewO | Trade licensing exams |
Each collection has additional specific parameters. See the tool description for details.
</details> <details> <summary><strong>ris_history</strong> — Document Change History</summary>Track document creation, modification, and deletion across the RIS database.
Inputs:
| Parameter | Type | Description |
|---|---|---|
applikation | string | Required. Application type (36 options — see below) |
aenderungen_von | string | Changes from date (YYYY-MM-DD) |
aenderungen_bis | string | Changes to date (YYYY-MM-DD) |
include_deleted | boolean | Include deleted documents (default: false) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Available applications (36):
Federal law: Bundesnormen, BgblAuth, BgblAlt, BgblPdf, RegV
State law: Landesnormen, LgblAuth, Lgbl, LgblNO, Vbl, Gemeinderecht, GemeinderechtAuth
Case law: Justiz, Vfgh, Vwgh, Bvwg, Lvwg, Dsk, Gbk, Pvak, AsylGH
Other: Bvb, Mrp, Erlaesse, PruefGewO, Avsv, Spg, KmGer, Dok, Normenliste
Historical (jurisdictions dissolved on 2014-01-01, change history still tracked): Verg, Upts, Uvs, Ubas, Umse, Bks
Search state ordinance gazettes (Verordnungsblätter).
Note: Currently only data from Tirol is available (since January 2022).
Inputs:
| Parameter | Type | Description |
|---|---|---|
suchworte | string | Full-text search |
titel | string | Search in titles |
bundesland | string | Province name |
kundmachungsnummer | string | Announcement number |
kundmachungsdatum_von | string | Date from (YYYY-MM-DD) |
kundmachungsdatum_bis | string | Date to (YYYY-MM-DD) |
seite | number | Page number |
limit | number | Results per page: 10, 20, 50, 100 (default: 20). Prefer 20; a page over the structured-payload budget is delivered at the next smaller size (see Result size) |
response_format | string | "markdown" or "json" |
Result size
The text block of every tool is capped at 25,000 characters. The search tools'
structuredContent has its own budget of 45,000 characters (serialized); a
page that would exceed it is delivered at the next smaller RIS page size
(100 → 50 → 20 → 10) with page, page_size, has_more and the query echo
rewritten to that size and a German notice in both the text and the payload.
Page with query.limit and query.seite as echoed. Prefer limit: 20; 50
suits a broad survey; 100 is only ever delivered when the hits are small.
The default is calibrated to Claude Code, which rejects a result whose
structured payload exceeds 25,000 tokens (measured: rejected at 58,659
characters, accepted at 46,311; the margin below that covers content that
tokenizes worse); claude.ai renders far larger payloads and needs no budget.
Self-hosters whose client accepts larger results can raise the budget with the
RIS_STRUCTURED_CONTENT_BUDGET environment variable (a positive integer).
Development
Prerequisites
- Node.js >= 20.19.0 (required by the Vite 7 widget build)
Setup
git clone https://github.com/Honeyfield-Org/ris-mcp-ts.git
cd ris-mcp-ts
pnpm install
pnpm run build
Scripts
| Script | Description |
|---|---|
pnpm run dev | Start with hot reload (tsx) |
pnpm run build | Compile TypeScript |
pnpm start | Run compiled version |
pnpm test | Run the server tests |
pnpm run test:ui | Run the widget tests (jsdom) |
pnpm run gen:ui | Build the widget bundle into src/generated/ (runs automatically before dev/test/typecheck) |
pnpm run check | Typecheck + lint + format check + both test suites |
pnpm run inspect | Launch MCP Inspector for manual testing |
Project Structure
src/
├── index.ts # Entry point (stdio transport)
├── server.ts # MCP server setup, delegates to tools/
├── client.ts # HTTP client for RIS API
├── types.ts # Zod schemas + TypeScript types
├── parser.ts # JSON parsing and response normalization
├── formatting.ts # Output formatting (markdown/json)
├── helpers.ts # Shared helper functions
├── constants.ts # Static mappings and configuration
├── widgets.ts # MCP Apps widget resource + tool metadata
├── tools/ # One file per tool handler
│ ├── index.ts
│ ├── bundesrecht.ts
│ ├── landesrecht.ts
│ ├── judikatur.ts
│ └── ...
└── __tests__/ # Unit and integration tests
ui/ # Widget sources (browser code, built by Vite)
├── trefferliste/ # The result-list widget
└── shared/ # Host bridge, shared states and theme
Contributing
See CONTRIBUTING.md for guidelines.
License
Built on the Open Government Data API provided by the Austrian Federal Chancellery (Bundeskanzleramt).
常见问题
io.github.philrox/ris 是什么?
通过RIS API访问奥地利法律、法院判决及各类法律文书,便于法律检索、研究与合规分析。
相关 Skills
网页构建器
by anthropics
面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。
✎ 在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。
网页应用测试
by anthropics
用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。
✎ 借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。
前端设计
by anthropics
面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。
✎ 想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。
相关 MCP Server
GitHub
编辑精选by GitHub
GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。
✎ 这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。
Context7 文档查询
编辑精选by Context7
Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。
✎ 它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。
by tldraw
tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。
✎ 这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。