# PH Schools MCP Server [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/darwinphi/ph-schools-mcp-server  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/ph-schools-mcp-server

## Description
Local stdio MCP server for searching and analyzing the Philippine schools masterlist dataset.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "ph-schools-mcp-server": {
    "command": "npx",
    "args": ["-y","@darwinphi/ph-schools-mcp-server"]
  }
}
```

## Documentation & README

# PH Schools MCP Server

Local `stdio` MCP server for querying and analyzing the Philippine schools masterlist dataset.

## What This Server Provides

Tools:

1. `search_schools`
2. `get_school_by_beis_id`
3. `list_regions`
4. `list_divisions`
5. `dataset_stats`

## Install and Run

```bash
npm install
npm start
```

Use `npm start` only when running from this repo manually.

## Which Setup to Use

- VS Code MCP (`.vscode/mcp.json`): enough for normal usage. If status is `Running`, VS Code already started the server.
- Claude Desktop (`claude_desktop_config.json`): enough for normal usage. Restart Claude after config changes.
- `npx -y @darwinphi/ph-schools-mcp-server ...`: one-off CLI usage without cloning repo.
- `npm install && npm start`: local development/maintenance in this repository.

## Usage Scenarios

1. `mcp.json` configured, no manual `npx`: works for chat tool calls (`dataset_stats`, `search_schools`, etc.).
2. Manual `npx -y @darwinphi/ph-schools-mcp-server`, no MCP client config: server process starts, but chat clients won't use it automatically.
3. `mcp.json` configured plus manual `npx` start: usually unnecessary; let the MCP client manage start/stop.
4. One-off commands without MCP chat: use `npx ... --help` or `npx ... sync-data ...`.

Without MCP client config, automatic VS Code/Claude tool-calling will not work.

## When to Use `mcp.json`

Use `mcp.json` for normal day-to-day MCP usage in VS Code (or equivalent client config in Claude Desktop).

Use it for:

1. Automatic server startup and lifecycle management by the MCP client
2. MCP tool usage directly from chat prompts (`dataset_stats`, `search_schools`, etc.)
3. Team/project-level shared MCP setup in a workspace

If MCP status shows `Running`, the client already started the server; manual `npm start` or manual `npx` start is usually unnecessary.

## When to Use `npx`

Use `npx` from a terminal when you need one-off CLI actions without cloning or developing this repo.

Use it for:

1. Sanity check that the published package runs: `npx -y @darwinphi/ph-schools-mcp-server --help`
2. Manual dataset download/update: `npx -y @darwinphi/ph-schools-mcp-server sync-data --tag v1.0.1 --output "$HOME/.ph-schools/data.json"`
3. Manual debug startup outside client-managed MCP lifecycle: `npx -y @darwinphi/ph-schools-mcp-server`

Do not use `npx` start as a replacement for VS Code/Claude MCP config. In normal usage, let the MCP client manage server startup from its config.

## When to Use `npm install` and `npm start`

Use these when working from this repository (developer/maintainer workflow), not for normal client usage.

Use them for:

1. Local development while editing source files in this repo
2. Running tests before commits/releases
3. Debugging local unpublished changes

Typical local workflow:

```bash
npm install
npm test
npm start
```

If your VS Code/Claude MCP config is already working, you usually do not need to run `npm start` manually.

### CLI (published package)

```bash
# Start MCP server over stdio
npx -y @darwinphi/ph-schools-mcp-server

# Sync canonical dataset once to a chosen path
npx -y @darwinphi/ph-schools-mcp-server sync-data --tag v1.0.1 --output "$HOME/.ph-schools/data.json"
```

### Quick Verify

```bash
npx -y @darwinphi/ph-schools-mcp-server --help
npx -y @darwinphi/ph-schools-mcp-server sync-data --tag v1.0.1 --output "$HOME/.ph-schools/data.json"
```

## Dataset Configuration

This server is hybrid by default:

- If local dataset file exists, it uses that file immediately.
- If local dataset file is missing, it auto-downloads from the canonical dataset URL and caches locally.

Default canonical URL (pinned tag `v1.0.1`):

`https://raw.githubusercontent.com/darwinphi/ph-schools-dataset/v1.0.1/schools_masterlist_2020_2021.json`

Runtime env vars:

- `PH_SCHOOLS_DATA_PATH`: preferred local JSON file path (used directly if present; auto-synced to this path if missing)
- `PH_SCHOOLS_DATA_URL`: override download URL for `sync-data`
- `PH_SCHOOLS_DATA_TAG`: canonical tag for `sync-data` when URL is not provided

## VS Code MCP Config (Copy/Paste)

Set `.vscode/mcp.json`:

```json
{
  "servers": {
    "phSchools": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@darwinphi/ph-schools-mcp-server"],
      "env": {
        "PH_SCHOOLS_DATA_PATH": "/Users/your-user/.ph-schools/data.json"
      }
    }
  }
}
```

If `PH_SCHOOLS_DATA_PATH` file is missing, the server automatically downloads from canonical source and writes to that path.

## Claude Desktop Config (Copy/Paste)

Update Claude config:

```json
{
  "mcpServers": {
    "ph-schools": {
      "command": "npx",
      "args": ["-y", "@darwinphi/ph-schools-mcp-server"],
      "env": {
        "PH_SCHOOLS_DATA_PATH": "/Users/your-user/.ph-schools/data.json"
      }
    }
  }
}
```

Alternative if `npx` is unreliable in your shell: install globally and use `"command": "ph-schools-mcp-server"`.

If `PH_SCHOOLS_DATA_PATH` file is missing, the server automatically downloads from canonical source and writes to that path.

Typical macOS config file:

`~/Library/Application Support/Claude/claude_desktop_config.json`

## Test Commands

```bash
npm test
npm run test:package
```

## Example Prompts

- `Run dataset_stats and summarize key insights.`
- `List all divisions in Region I using list_divisions.`
- `Search schools in region "Region I" and division "Ilocos Norte".`
- `Get school by BEIS ID 100001 using get_school_by_beis_id.`
- `Search schools with query "High School".`

## Publishing and Release Flow

One-time npm setup (Trusted Publishing):

1. On npmjs.com, open package `@darwinphi/ph-schools-mcp-server` → Settings → Trusted publishers.
2. Add GitHub Actions trusted publisher with:
   - Owner/User: `darwinphi`
   - Repository: `ph-schools-mcp-server`
   - Workflow filename: `cd.yml`
3. Do not use `NPM_TOKEN`; release workflow uses OIDC (`id-token: write`).

Manual release flow (v1):

1. Update pinned dataset tag in `src/constants.js`.
2. Bump package version:

```bash
npm version patch   # or minor / major
```

What `npm version patch` does:
- Updates `package.json` version (e.g., `1.0.1` -> `1.0.2`)
- Updates `package-lock.json` version fields
- Creates a git commit
- Creates a git tag (e.g., `v1.0.2`)

3. Sync `server.json` version to match `package.json`.
4. Run:

```bash
npm ci
npm test
npm run test:package
```

5. Push commit and tags:

```bash
git push
git push --tags
```

6. Create GitHub Release notes from the tag:

```bash
gh release create v<new_version> --generate-notes --title "v<new_version>"
```

Example:

```bash
gh release create v1.0.2 --generate-notes --title "v1.0.2"
```

7. Push commit and tags. Tag pushes (`v*`) automatically trigger `CD Release` workflow.
8. Workflow publishes npm package, then publishes MCP Registry metadata.

For metadata-only updates, use workflow `Publish MCP Registry Metadata`.

## License and Data Provenance

- Code license: ISC ([LICENSE](https://github.com/darwinphi/ph-schools-mcp-server/blob/HEAD/LICENSE)).
- Dataset source: `darwinphi/ph-schools-dataset` (canonical repository backed by gov.ph source data).
- Use of dataset remains subject to source terms and applicable policies.

