Skip to main content
Glama
monsunic

Nusawave MCP Server

Official
by monsunic
README.md
# Nusawave MCP Server

MCP tools to read local git repos and fetch public web pages — no SerpAPI or Firecrawl required.

One shared `server.py` runs as **multiple MCP servers** (one process per repo), configured via environment variables or JSON config files.

## Tools

| Tool | What it does |
|------|----------------|
| `get_repo_overview` | README + key root files when present |
| `list_docs` | List markdown files under `docs/` |
| `read_repo_file` | Read any file inside the configured repo |
| `fetch_public_page` | HTTP fetch any public URL → plain text |
| `audit_live_site` | Fetch live site sections — only when `NUSAWAVE_SITE_URL` is set |

## Quick start

```bash
git clone https://github.com/YOUR_ORG/nusawave-mcp.git
cd nusawave-mcp

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

# Test on stdio (Ctrl+C to stop)
NUSAWAVE_REPO_PATH=/path/to/your/repo python server.py
```

Or with [uv](https://docs.astral.sh/uv/):

```bash
uv sync
NUSAWAVE_REPO_PATH=/path/to/your/repo uv run server.py
```

## Environment variables

| Variable | Default | Purpose |
|----------|---------|---------|
| `NUSAWAVE_MCP_NAME` | `nusawave` | FastMCP server name (set per config entry) |
| `NUSAWAVE_REPO_PATH` | `.` | Local clone path for this server process |
| `NUSAWAVE_SITE_URL` | _(unset)_ | Live site base URL; required for `audit_live_site` |

## Example: Nusawave projects

The maintainers run one server entry per repo. Copy the example config and adjust paths:

```bash
cp typingmind-mcp-config.example.json typingmind-mcp-config.json
# edit paths in typingmind-mcp-config.json
```

| Server key | Example repo | `audit_live_site` |
|------------|--------------|-------------------|
| `nusawave-labs-website` | `nusawave-labs.github.io` | Yes |
| `nusawave-forecast` | `nusawave-forecast` | No |
| `nusawave-extract-point` | `extract-point` | No |
| `nusawave-io` | `nusawave.io` | No |
| `nusawave-brainstormingxclaude` | `brainstormingxclaude` | No |

## Connect to Claude CLI

From this repo directory:

```bash
claude mcp add my-project \
  -e NUSAWAVE_MCP_NAME=my-project \
  -e NUSAWAVE_REPO_PATH=/path/to/your/repo \
  -- /path/to/venv/bin/python /path/to/nusawave-mcp/server.py

claude mcp get my-project
```

Then run `claude` and ask it to use your MCP tools, e.g. “Use my-project to get the repo overview.”

## Connect to Claude Desktop (Windows + WSL)

If Claude Desktop runs on Windows but the repo lives in WSL, use a UNC path for `--directory` or invoke WSL explicitly. See `examples/claude-desktop-config.json`.

Minimal WSL example (merge into `%APPDATA%\Claude\claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "nusawave-my-project": {
      "command": "wsl",
      "args": [
        "-d", "Ubuntu", "--",
        "/home/USER/apps/mcp/nusawave/.venv/bin/python",
        "/home/USER/apps/mcp/nusawave/server.py"
      ],
      "env": {
        "NUSAWAVE_MCP_NAME": "nusawave-my-project",
        "NUSAWAVE_REPO_PATH": "/home/USER/apps/your-repo"
      }
    }
  }
}
```

Restart Claude Desktop after editing the config.

## Connect to TypingMind

### 1. Start the MCP connector

```bash
./start-connector.sh YOUR_AUTH_TOKEN
```

Use the **same token** shown in TypingMind → Settings → MCP. The script prints the exact URL to paste.

**Critical:** Connector URL must include the port:

| URL | Result |
|-----|--------|
| `http://127.0.0.1:50880` | Correct |
| `http://localhost:50880` | Correct |
| `http://localhost` | Wrong — hits nginx on port 80 → **404 / "Update required"** |
| `http://0.0.0.0:50880` | Wrong — browsers cannot connect to `0.0.0.0` |

Verify with:

```bash
./verify-connector.sh http://127.0.0.1:50880 YOUR_AUTH_TOKEN
```

### 2. TypingMind settings

1. **Settings → Advanced → Model Context Protocol**
2. **Delete and re-setup MCP Connector** (clears stale URL)
3. Choose **Private MCP Connector** (not TypingMind Cloud)
4. Paste connector URL and auth token from step 1
5. Wait for green check / Get Started

### 3. Add local MCP servers

Click **Edit Servers** and paste your `typingmind-mcp-config.json` (copy from `typingmind-mcp-config.example.json` first).

### 4. Enable plugins

**Plugins** → enable the servers you need → attach to your character.

> **"Update required… restart MCP Connector"** — TypingMind got **404** on `/mcp-connect`. Almost always a **wrong Connector URL** (missing `:50880`).

### WSL note

If TypingMind runs in **Windows** but this repo is in **WSL**, run the MCP connector inside WSL. Paths in the config must be valid on the machine where Python runs.

## Example prompts

- "Get the repo overview for my forecast project"
- "Read docs/index.md and compare with the live site"
- "Summarize the repository structure"
- "Fetch https://example.github.io/ and summarize the homepage"

## License

MIT — see [LICENSE](LICENSE).

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct purpose: live site auditing, generic page fetching, repo overview, doc listing, and file reading. No two tools have overlapping functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (audit_live_site, fetch_public_page, get_repo_overview, list_docs, read_repo_file), making them predictable.

Tool Count5/5

With only 5 tools, the server is tightly scoped to auditing and repository access. Each tool is necessary and the count fits the domain well.

Completeness4/5

Core operations for auditing (live site fetch, repo docs, file reading) are covered. Minor gaps exist, such as a dedicated comparison tool, but agents can combine existing tools to achieve similar results.

Maintenance

ActivityStale
ResponsivenessNo issues