{
  "markdown": "- [日本語 🇯🇵](./README_JP.md)\n\n# @growi/mcp-server\n\n[![npm version](https://badge.fury.io/js/%40growi%2Fmcp-server.svg)](https://badge.fury.io/js/%40growi%2Fmcp-server)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA Model Context Protocol (MCP) server that connects AI models to GROWI wiki content. Enables LLMs to search and retrieve information from your organization's knowledge base for accurate, context-aware responses. Supports connections to multiple GROWI apps.\n\n## Key Features\n\n- 🔍 **GROWI page search and retrieval**\n- 📝 **Page management**\n- 🏷️ **Tag management**\n- 📋 **Comment management**\n- 🔗 **Share link management**\n\n## Supported GROWI Versions\n\n- GROWI v7.3.x or higher recommended\n- Some features are also available starting from GROWI v7.2.5 and later\n- [GROWI API](https://docs.growi.org/en/api/)\n\n\n## Agent Skills\n\nThis repository also provides [Agent Skills](https://skills.sh/) — reusable workflow definitions that AI coding agents can load to interact with GROWI more effectively.\n\n### Available Skills\n\n- **growi-mcp-setup** — Walks you through setting up the GROWI MCP server. After the skill is installed, it guides you from configuring UTCP Code-Mode through verifying the connection.\n- **growi-smart-save** — Save content to GROWI with intelligent path suggestions. The agent calls the `suggest-path` tool, presents destination candidates, and guides the user through page naming and visibility settings.\n\n## Quick Start (Recommended)\n\nThe fastest way to start using GROWI. Once you install the skill, the rest of the setup (connecting the MCP server, configuring UTCP Code-Mode, verifying connectivity) is guided by the AI agent.\n\n### 1. Install the Skill\n\nInstall the skill for your agent.\n\n#### Claude Desktop (Cowork)\n\n1. Go to **Customize** > **Personal Plugins** (click the + icon)\n2. Click **Browse Plugins** > select the **Personal** tab\n3. Click the + icon next to **Local Upload**\n4. Select **Add marketplace from GitHub**\n5. Enter the repository URL and click **Sync**:\n\n```\nhttps://github.com/growilabs/growi-mcp-server\n```\n\n#### Claude Code\n\nAdd this repository as a plugin marketplace, then install the plugin:\n\n```\n/plugin marketplace add growilabs/growi-mcp-server\n/plugin install mcp-client-skills\n```\n\n#### Gemini CLI\n\nInstall as a Gemini CLI extension (includes both MCP tools and skills):\n\n```bash\ngemini extensions install https://github.com/growilabs/growi-mcp-server\n```\n\nUpdate with:\n\n```bash\ngemini extensions update growi-mcp-server\n```\n\n> [!IMPORTANT]\n> Extensions installed from a release earlier than v1.7.1 cannot start the MCP server: only the bundled skills work and the GROWI tools never show up. Existing installs do not switch over on their own, so run `gemini extensions update growi-mcp-server` to pick up the fix.\n\n#### Skills.sh (Vercel)\n\nWorks with Claude Code, Gemini CLI, Cursor, Codex, GitHub Copilot, and [many other agents](https://skills.sh/):\n\n```bash\nnpx skills add growilabs/growi-mcp-server\n```\n\nUpdate with:\n\n```bash\nnpx skills update\n```\n\n#### Manual Installation\n\nDownload skills directly from the repository and place them in your agent's skills directory:\n\n1. Copy the desired skill directory from `skills/` in this repository\n2. Place it in your agent's skills directory:\n   - Claude Code: `.claude/skills/<skill-name>/SKILL.md`\n   - Gemini CLI: `.gemini/skills/<skill-name>/SKILL.md`\n   - Other agents: `.agents/skills/<skill-name>/SKILL.md`\n\n### 2. Restart Your Agent\n\nAfter installation, restart (or reload) your agent so the skill is recognized.\n\n### 3. Ask the AI to Set Up\n\nTell your agent \"set up GROWI\", and the `growi-mcp-setup` skill will start and guide you from the MCP server connection settings through verifying connectivity.\n\n> [!NOTE]\n> If you want to configure the MCP server directly without the skill, see [Use the MCP Server Directly](#use-the-mcp-server-directly).\n\n## Use the MCP Server Directly\n\nYou can also register the MCP server directly with your agent instead of using the skill. Use this for a minimal setup, or as a fallback when skill-based setup is not available.\n\nSupports simultaneous connections to multiple GROWI apps. Each app is configured using numbered environment variables.\n\n### Single App Configuration Example\n```json\n{\n  \"mcpServers\": {\n    \"growi\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@growi/mcp-server\"],\n      \"env\": {\n        \"GROWI_APP_NAME_1\": \"main\",\n        \"GROWI_BASE_URL_1\": \"https://your-growi-instance.com\",\n        \"GROWI_API_TOKEN_1\": \"your_growi_api_token\"\n      }\n    }\n  }\n}\n```\n\n### Multiple Apps Configuration Example\n```json\n{\n  \"mcpServers\": {\n    \"growi\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@growi/mcp-server\"],\n      \"env\": {\n        \"GROWI_DEFAULT_APP_NAME\": \"staging\",\n\n        \"GROWI_APP_NAME_1\": \"production\",\n        \"GROWI_BASE_URL_1\": \"https://wiki.example.com\",\n        \"GROWI_API_TOKEN_1\": \"token_for_production\",\n\n        \"GROWI_APP_NAME_2\": \"staging\",\n        \"GROWI_BASE_URL_2\": \"https://wiki-staging.example.com\",\n        \"GROWI_API_TOKEN_2\": \"token_for_staging\",\n\n        \"GROWI_APP_NAME_3\": \"development\",\n        \"GROWI_BASE_URL_3\": \"https://wiki-dev.example.com\",\n        \"GROWI_API_TOKEN_3\": \"token_for_development\"\n      }\n    }\n  }\n}\n```\n\n> [!TIP]\n> For skill-based setup (recommended), see [Quick Start](#quick-start-recommended).\n\n\n## Available Tools (Features)\n\n### Page Management\n- `searchPages` - Search pages by keywords\n- `createPage` - Create a new page\n- `updatePage` - Update an existing page (full-body replace; returns the new revision ID)\n- `editPage` - Edit parts of a page with string replacements without sending the whole body (supports dry-run diff preview)\n- `deletePages` - Delete pages (bulk operation supported)\n- `duplicatePage` - Duplicate a page (including child pages)\n- `renamePage` - Change page name and path\n- `getPageOutline` - Get the heading outline of a page (heading tree with line ranges and sizes, without the body); also detects setext-style (underline) headings\n- `getPageSection` - Read only a part of a page, addressed by heading text or line range\n- `getPageWholeContents` - Get the full markdown body of a page\n- `getPage` - **Deprecated, will be removed in 2.0.0.** Alias of `getPageWholeContents` kept for backward compatibility; use `getPageOutline`, `getPageSection`, or `getPageWholeContents` instead\n- `getPageInfo` - Get detailed page information\n- `getRecentPages` - Get list of recently updated pages\n- `getPageListingRoot` - Get root page list\n- `getPageListingChildren` - Get child pages of specified page\n- `pageListingInfo` - Get summary information of page listings\n- `publishPage` / `unpublishPage` - Set page publish/unpublish status\n\n### Tag Management\n- `getPageTag` - Get tags of a page\n- `updateTag` - Update tags of a page\n- `getTagList` - Get list of tags\n- `searchTags` - Search tags\n\n### Comments & Discussions\n- `getComments` - Get comments of a page\n- `addComment` - Add a comment to a page\n- `removeComment` - Remove a comment from a page\n\n### Revision Management\n- `listRevisions` - Get page edit history (revision bodies are omitted; bodyLength is returned instead)\n- `getRevision` - Get details of a specific revision\n- `listRevisionChanges` - List the authenticated user's consecutive-edit runs across all pages (requires GROWI v7.5.6 or later)\n- `getRevisionDiffs` - Get unified diffs for a batch of revision pairs (requires GROWI v7.5.6 or later)\n\n### Share Links\n- `createShareLink` - Create a share link\n- `getShareLinks` - Get share links of a page\n- `deleteShareLinks` - Delete share links\n- `deleteShareLinkById` - Delete a specific share link\n\n### User Information\n- `getUserRecentPages` - Get recent pages of a specific user\n\n\n## Vault Commands\n\nBesides serving MCP tools, the package provides commands for working with a local clone of a GROWI\nVault (the wiki exposed as a read-only git endpoint). They exist so an agent can search the wiki as\nplain files — the `growi-smart-save` skill uses them for its high-accuracy destination search.\n\n```bash\n# Clone the Vault on first run, refresh it afterwards, and print where it is\nnpx @growi/mcp-server vault-sync --app-name main [--dest <dir>] [--no-user]\n\n# Print the clone directory without touching the network\nnpx @growi/mcp-server vault-path --app-name main\n\n# Decode on-disk Vault file names into GROWI page paths\nnpx @growi/mcp-server vault-decode '旧%3A old page.md'\n```\n\nThe instance is named by its app name, and its base URL and credential come from the same\nconfiguration the MCP server uses — including `GROWI_HTTP_AUTH_*` when the instance sits behind a\nreverse proxy — so no token is ever passed on the command line. Requires `git` 2.31+ (2.35+ for\n`--no-user`). Exit codes: `0` the clone is usable, `1` a usage or environment problem, `2` a git\nfailure or an unusable clone.\n\n\n## Configuration Options\n\n### Environment Variables\n\n| Variable Name | Required | Description | Default Value |\n|---------------|----------|-------------|---------------|\n| `GROWI_APP_NAME_{N}` | ✅ | GROWI app identifier name (N is an integer) | - |\n| `GROWI_BASE_URL_{N}` | ✅ | Base URL of GROWI instance (N is an integer) | - |\n| `GROWI_API_TOKEN_{N}` | ✅ | GROWI API access token (N is an integer) | - |\n| `GROWI_HTTP_AUTH_USERNAME_{N}` | | Username for HTTP auth (Basic) in front of GROWI, e.g. a reverse proxy. Required together with the password. | - |\n| `GROWI_HTTP_AUTH_PASSWORD_{N}` | | Password for HTTP auth (Basic) in front of GROWI. Required together with the username. | - |\n| `GROWI_DEFAULT_APP_NAME` | | Default app name to use | First configured app |\n\n### Multiple Apps Configuration Notes\n- Use integer values (1, 2, 3...) for each app configuration (sequential numbering is not required)\n- Combination of `GROWI_APP_NAME_N`, `GROWI_BASE_URL_N`, and `GROWI_API_TOKEN_N` is required\n- App names, base URLs, and API tokens must each be unique\n- If `GROWI_DEFAULT_APP_NAME` is omitted, the first configured app becomes the default\n- The app specified in `GROWI_DEFAULT_APP_NAME` will be used as the default app when the LLM does not explicitly include an app name in the prompt\n\n### HTTP Auth (Basic) for Proxied GROWI\nWhen a GROWI instance sits behind HTTP authentication (e.g. a reverse proxy enforcing Basic auth), set both `GROWI_HTTP_AUTH_USERNAME_{N}` and `GROWI_HTTP_AUTH_PASSWORD_{N}` for that app. You only provide a username and password; the `Basic` `Authorization` header is built for you.\n\n- Set both or neither — providing only one fails fast with a clear error.\n- When configured, the proxy credentials go in the `Authorization` header and the GROWI API token (`GROWI_API_TOKEN_{N}`) is sent via the `X-GROWI-ACCESS-TOKEN` header instead. Without it, the default `Bearer` token scheme is unchanged.\n- Only Basic auth is supported for now; Digest support is planned. The variable names are scheme-agnostic so they can be reused when Digest lands.\n\n\n## Developer Information\n\n### Requirements\n- Node.js 18 or higher\n- pnpm (recommended)\n- GROWI instance (for development and testing)\n\n### Getting Started\n\n1. Clone the repository\n```bash\ngit clone https://github.com/growilabs/growi-mcp-server.git\ncd growi-mcp-server\n```\n\n2. Install dependencies\n```bash\npnpm install\n```\n\n3. Set up environment variables\n```bash\ncp .env.example .env.local\n# Edit .env.local to enter GROWI connection information\n```\n\n4. Start the development server\n```bash\n# Test with MCP CLI\npnpm dev:cli\n\n# Develop with MCP Inspector\npnpm dev:inspect\n```\n\n### Build and Test\n```bash\n# Build\npnpm build\n\n# Lint\npnpm lint\n\n# Run tests\npnpm test\n\n# Run tests with coverage\npnpm test:coverage\n\n# Run in production\npnpm start\n```\n\n### MCP Server Configuration\n\n1. Build\n```bash\npnpm build\n```\n\n2. MCP Server Configuration (Single App)\n```json\n{\n  \"mcpServers\": {\n    \"growi\": {\n      \"command\": \"node\",\n      \"args\": [\"/Users/username/projects/growi-mcp-server/dist/index.js\"],\n      \"env\": {\n        \"GROWI_APP_NAME_1\": \"main\",\n        \"GROWI_BASE_URL_1\": \"https://your-growi-instance.com\",\n        \"GROWI_API_TOKEN_1\": \"your_growi_api_token\"\n      }\n    }\n  }\n}\n```\n\n3. MCP Server Configuration (Multiple Apps)\n```json\n{\n  \"mcpServers\": {\n    \"growi\": {\n      \"command\": \"node\",\n      \"args\": [\"/Users/username/projects/growi-mcp-server/dist/index.js\"],\n      \"env\": {\n        \"GROWI_DEFAULT_APP_NAME\": \"production\",\n\n        \"GROWI_APP_NAME_1\": \"production\",\n        \"GROWI_BASE_URL_1\": \"https://wiki.example.com\",\n        \"GROWI_API_TOKEN_1\": \"production_token\",\n\n        \"GROWI_APP_NAME_2\": \"staging\",\n        \"GROWI_BASE_URL_2\": \"https://wiki-staging.example.com\",\n        \"GROWI_API_TOKEN_2\": \"staging_token\"\n      }\n    }\n  }\n}\n```\n\n> [!NOTE]\n> Set the absolute path to the built output in \"args\"\n\n### Troubleshooting\n\n### When unable to connect to GROWI\n1. Check connectivity\n    ```bash\n    curl -v http://app:3000/_api/v3/healthcheck\n    ```\n2. If the `app` hostname cannot be resolved, check the devcontainer network and verify it includes `growi_devcontainer_default`\n    - The `.devcontainer/devcontainer.json` file sets `--network` in `runArgs`, so rebuilding the container should apply this setting\n    - To add manually, run the following:\n        - Run `docker network` command on the docker host machine\n        ```bash\n        docker network connect growi_devcontainer_default growi-mcp-server-dev\n        ```\n\n\n### Contributing\n\nContributions to the project are welcome!\n\n#### How to Contribute\n1. **Issue Reports**: Bug reports and feature requests via [GitHub Issues](https://github.com/growilabs/growi-mcp-server/issues)\n2. **Pull Requests**:\n   - Fork and create a branch\n   - Implement changes\n   - Add tests (if applicable)\n   - Create a pull request\n\n#### Development Guidelines\n- **Coding Standards**: Use [Biome](https://biomejs.dev/)\n- **Commit Messages**: Follow [Conventional Commits](https://www.conventionalcommits.org/)\n- **Changesets**: If your pull request changes anything users can observe, run `pnpm changeset` to record the impact level and a user-facing description, and commit the generated `.changeset/*.md` with your PR. Internal-only changes don't need one.\n\n## License\n\nThis project is released under the [MIT License](./LICENSE).\n\n---\n\n## Related Links\n\n- **[GROWI Official Site](https://growi.org/)** - Open source wiki platform\n- **[Model Context Protocol](https://modelcontextprotocol.io/)** - Standard protocol for AI and tool integration\n- **[GROWI SDK TypeScript](https://github.com/growilabs/growi-sdk-typescript)** - GROWI API TypeScript SDK\n- **[FastMCP](https://github.com/punkpeye/fastmcp)** - MCP server development framework\n\n---\n\n**Notice**\n\nThis MCP server is under development. APIs may change without notice. Please test thoroughly before using in production environments.\n",
  "bytes": 14826,
  "sha": "3aecdd17d7098c9f41e40efce663d89b87d41f778fb35e62f0641b1c52d3b341",
  "repo_slug": "growilabs/growi-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_growilabs_growi_mcp_server_ba56121a/readme"
}