Sponsored by Deepsite.site

PSGC MCP Server

Created By
GodModeArch14 days ago
A Model Context Protocol server that provides Philippine Standard Geographic Code (PSGC) data to LLMs. Built on Cloudflare Workers with KV storage. Public, read-only, no authentication required. Data sourced directly from the Philippine Statistics Authority quarterly PSGC publication. Cached in Cloudflare KV for reliability and low-latency global access.
Overview

PSGC MCP Server

npm version Cloudflare Workers TypeScript License: MIT

A Model Context Protocol server that provides Philippine Standard Geographic Code (PSGC) data to LLMs. Built on Cloudflare Workers with KV storage.

Public, read-only, no authentication required. Data sourced directly from the Philippine Statistics Authority quarterly PSGC publication. Cached in Cloudflare KV for reliability and low-latency global access.

psgc-mcp MCP server

Tools

ToolDescription
lookupFetch a geographic entity by its 10-digit PSGC code
searchSearch entities by name with optional level filter and strict mode
get_hierarchyGet the full administrative chain (barangay to region)
list_childrenList direct children of a parent entity
list_by_typeList all entities at a given geographic level
batch_lookupLook up multiple entities in one call (max 50 codes)
query_by_populationQuery entities by population range with sorting and filtering

Geographic Levels

LevelDescriptionCount
RegRegion18
ProvProvince82
DistDistrict (NCR only)4
CityCity149
MunMunicipality1,493
SubMunSub-Municipality (Manila only)16
SGUSpecial Geographic Unit (BARMM)~8
BgyBarangay~42,000

Response Format

All data responses are wrapped in a standard envelope:

{
  "_meta": {
    "dataset_version": "PSGC Q4 2025",
    "dataset_date": "2025-12-31",
    "last_synced": "2026-03-02",
    "source": "Philippine Statistics Authority (PSA)",
    "source_url": "https://psa.gov.ph/classification/psgc/"
  },
  "data": { ... }
}

Error responses (isError: true) and informational messages (e.g. "No children found") are returned as plain text without wrapping.

Entity Schema

Entity objects returned by lookup, get_hierarchy, list_children, list_by_type, batch_lookup, and query_by_population use snake_case field names:

FieldTypeDescription
psgc_codestring10-digit PSGC code
namestringOfficial place name
levelstringGeographic level (Reg, Prov, Dist, City, Mun, SubMun, SGU, Bgy)
old_namestring | nullPrevious name, if renamed
city_classstring | nullCity classification: HUC, ICC, CC, or null
income_classstring | nullIncome classification (1st through 6th)
urban_ruralstring | nullUrban/Rural classification (barangays only)
populationnumber | null2024 Census population count
parent_codestring | nullPSGC code of parent entity

All fields are always present. Fields without data are null, never omitted.

Search Results

The search tool returns a lighter result object:

FieldTypeDescription
psgc_codestring10-digit PSGC code
namestringOfficial place name
levelstringGeographic level

The search tool accepts an optional strict boolean parameter. When strict: true, only exact name matches are returned (after normalization). Partial and substring matches are excluded. Useful when you know the exact place name and want to avoid ambiguous results.

Batch Lookup

The batch_lookup tool accepts an array of 1-50 PSGC codes and returns results in the same order as input. Codes not found return null at their position.

FieldTypeDescription
results(Entity | null)[]Entities in input order, null for not found
foundnumberCount of codes that resolved
not_foundnumberCount of codes that returned null
totalnumberTotal codes requested

Query by Population

The query_by_population tool finds entities within a population range, sorted by population. Useful for questions like "largest cities in Region III" or "municipalities under 50,000 people."

ParameterTypeRequiredDescription
levelstringYesGeographic level to query
parent_codestringBgy onlyScope results to a parent entity (prefix matching). Required for barangays.
min_populationnumberNoMinimum population (inclusive)
max_populationnumberNoMaximum population (inclusive)
sortasc | descNoSort order (default: desc)
limitnumberNoMax results, 1-100 (default: 10)

Response includes results (entity array), total_matching (total before limit), and returned (actual count returned). Entities with null population are excluded.

Connect

Add to your MCP client configuration:

{
  "mcpServers": {
    "psgc": {
      "url": "https://psgc.godmode.ph/mcp"
    }
  }
}

Quick test

curl -X POST https://psgc.godmode.ph/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "search",
      "arguments": { "query": "Carmona", "level": "Mun" }
    }
  }'

PSGC Code Format

PSGC codes are 10 digits with no spaces. The segments encode the full geographic hierarchy:

1 4 0 2 1 0 0 0 0 0
│ │ └─┬─┘ └─┬─┘ └─┬─┘
│ │   │     │     └── Barangay (last 3 digits)
│ │   │     └──────── Municipality/City (3 digits)
│ │   └────────────── Province (2 digits)
│ └────────────────── Island Group modifier
└──────────────────── Region (1 digit)

Leading zeros are significant — 014021000000 and 14021000000 are different codes. Always use the full 10-digit string.

Known edge cases:

  • NCR uses Districts instead of Provinces (Dist level)
  • Cotabato City is administratively in BARMM but geographically in Region XII — it appears under Prov code 124700000 (Maguindanao del Norte)
  • BARMM Special Geographic Units (SGU) don't follow the standard hierarchy and have no Province parent

Data Sources

SourceVintageDescription
PSA PSGC PublicationQ4 2025 (January 13, 2026)Geographic codes, names, levels, classifications
2024 Census of PopulationProclamation No. 973Population counts per entity
PSA PSGC Old Names columnQ4 2025Historical/previous place names
PSA PSGC Urban/Rural columnQ4 2025Barangay urban/rural classification

Last synced: March 2, 2026.

Breaking Changes (v1.1.0+)

  • All data responses are now wrapped in { _meta, data }. Consumers must unwrap data from the response.
  • Entity field names changed to snake_case: code is now psgc_code, parent is now parent_code, cityClass is now city_class, etc.
  • Search results use psgc_code instead of code.
  • All entity fields are always present. Previously optional fields now appear as null instead of being omitted.
  • Internal fields regionCode and provinceCode are no longer exposed in API responses.

Part of a suite of Philippine public data MCP servers:

  • PSGC MCP (this repo)
  • LTS MCP - DHSUD License to Sell verification
  • PH Holidays MCP -> Coming soon
  • BSP Bank Directory MCP -> Coming soon

All servers are free, public, and read-only. Data pulled from official Philippine government sources.

Contributing and Issues

Found a data error or an edge case that isn't handled? Open an issue. The quirks section above covers the most common ones, but PSGC data has accumulated inconsistencies over decades of LGU reclassifications and the issues list is the best place to track them.

PSA publishes updates quarterly. If the data looks stale, open an issue and it will be refreshed ahead of the next scheduled sync.

Data Pipeline

The PSGC data is parsed from PSA's Excel publication and stored in Cloudflare KV. To update:

1. Download the PSGC Excel file

Get the latest publication from PSA PSGC and place it in scripts/data/.

2. Diff (optional)

npm run diff-psgc -- "scripts/data/Q3 2025/PSGC-3Q-2025-Publication-Datafile.xlsx" "scripts/data/PSGC-4Q-2025-Publication-Datafile (1).xlsx"

Compares two quarterly Excel files and reports additions, removals, name changes, and field changes. Run this before the full parse to verify PSA's changelog.

3. Parse

npm run parse-psgc

Reads the Excel file, derives parent relationships, and writes chunked JSON files to scripts/data/output/.

4. Upload to KV

npm run upload-kv

Bulk uploads all JSON chunks to Cloudflare KV via wrangler.

5. Deploy

npm run deploy

Development

npm install
npm run dev

Dev server starts at http://localhost:8787. Connect your MCP client to http://localhost:8787/mcp.

Setup

Before first deploy, create the KV namespace:

npx wrangler kv namespace create PSGC_KV

Update wrangler.jsonc with the returned namespace ID.

Built by

Aaron Zara - Fractional CTO at Godmode Digital

Previously built REN.PH, a programmatic real estate platform with 60,000+ structured geographic pages covering every barangay, city, and province in the Philippines. The PSGC MCP came out of needing reliable, queryable PH geography data for AI agents and not finding anything that fit.

For enterprise SLAs, custom integrations, or other PH data sources: → godmode.ph

License

MIT

Server Config

{
  "mcpServers": {
    "psgc": {
      "url": "https://psgc.godmode.ph/mcp"
    }
  }
}
Recommend Servers
TraeBuild with Free GPT-4.1 & Claude 3.7. Fully MCP-Ready.
Jina AI MCP ToolsA Model Context Protocol (MCP) server that integrates with Jina AI Search Foundation APIs.
Amap Maps高德地图官方 MCP Server
Zhipu Web SearchZhipu Web Search MCP Server is a search engine specifically designed for large models. It integrates four search engines, allowing users to flexibly compare and switch between them. Building upon the web crawling and ranking capabilities of traditional search engines, it enhances intent recognition capabilities, returning results more suitable for large model processing (such as webpage titles, URLs, summaries, site names, site icons, etc.). This helps AI applications achieve "dynamic knowledge acquisition" and "precise scenario adaptation" capabilities.
MCP AdvisorMCP Advisor & Installation - Use the right MCP server for your needs
AiimagemultistyleA Model Context Protocol (MCP) server for image generation and manipulation using fal.ai's Stable Diffusion model.
MiniMax MCPOfficial MiniMax Model Context Protocol (MCP) server that enables interaction with powerful Text to Speech, image generation and video generation APIs.
DeepChatYour AI Partner on Desktop
RedisA Model Context Protocol server that provides access to Redis databases. This server enables LLMs to interact with Redis key-value stores through a set of standardized tools.
CursorThe AI Code Editor
ChatWiseThe second fastest AI chatbot™
Playwright McpPlaywright MCP server
Tavily Mcp
WindsurfThe new purpose-built IDE to harness magic
EdgeOne Pages MCPAn MCP service designed for deploying HTML content to EdgeOne Pages and obtaining an accessible public URL.
Baidu Map百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Y GuiA web-based graphical interface for AI chat interactions with support for multiple AI models and MCP (Model Context Protocol) servers.
BlenderBlenderMCP connects Blender to Claude AI through the Model Context Protocol (MCP), allowing Claude to directly interact with and control Blender. This integration enables prompt assisted 3D modeling, scene creation, and manipulation.
Visual Studio Code - Open Source ("Code - OSS")Visual Studio Code
Howtocook Mcp基于Anduin2017 / HowToCook (程序员在家做饭指南)的mcp server,帮你推荐菜谱、规划膳食,解决“今天吃什么“的世纪难题; Based on Anduin2017/HowToCook (Programmer's Guide to Cooking at Home), MCP Server helps you recommend recipes, plan meals, and solve the century old problem of "what to eat today"
Serper MCP ServerA Serper MCP Server