Agent Data Tools: Company, compliance and checks
38 tools: OFAC sanctions, counterparty checks, company, domain, email. 25 free calls.
作者提供的说明(英文原文)
40 MCP tools for 11 Indonesian government portals — BPOM, BPJPH, AHU, OJK, BMKG+
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
PROXY_URL, BPS_API_KEY标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"indonesia-civic-stack": {
"command": "uvx",
"args": [
"indonesia-civic-stack"
],
"env": {
"PROXY_URL": "your-value",
"BPS_API_KEY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add indonesia-civic-stack --env PROXY_URL=your-value --env BPS_API_KEY=your-value -- uvx indonesia-civic-stack运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"indonesia-civic-stack": {
"command": "uvx",
"args": [
"indonesia-civic-stack"
],
"env": {
"PROXY_URL": "your-value",
"BPS_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"indonesia-civic-stack": {
"type": "stdio",
"command": "uvx",
"args": [
"indonesia-civic-stack"
],
"env": {
"PROXY_URL": "your-value",
"BPS_API_KEY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
PROXY_URL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 suryast 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:BPS_API_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.1)于8个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Agent Data Tools: Company, compliance and checks, Agent Data Tools, CourtReserve MCP by usefulapi
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
38 tools: OFAC sanctions, counterparty checks, company, domain, email. 25 free calls.
641 agent tools: chain data, prices, sanctions, web, PDF. 25 free calls, then from $0.002.
Read club members, court availability, reservations, events, attendance and revenue reports.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Python SDK, MCP tools, and REST wrappers for Indonesian public-sector data. Release 1.2.1 includes 14 scraper modules, 45 unified MCP tools, and 11 REST module routers. These counts describe code, not live availability.
Indonesian public-data portals expose different APIs, HTML structures, browser requirements, and access restrictions. This project provides a shared response schema and reusable clients rather than requiring every civic-tech app to build its own integration. Portal changes can still break individual operations; verify the response and its provenance before drawing conclusions.
Each row has a scraper, normalizer, and module test file. “Tests present” means mocked/replayed tests exist, not that they establish current portal liveness. The MCP column counts decorators in the unified civic_stack/server.py.
| Module | Source configured in code | Data / method | MCP tools | REST | Tests present |
|---|---|---|---|---|---|
| bpom | cekbpom.pom.go.id | Product registration; HTTP HTML | 3 | Yes | Yes |
| bpjph | cmsbl.halal.go.id | Halal certificates; HTTP REST | 4 | Yes | Yes |
| ahu | ahu.go.id | Company registry; browser helper | 4 | Yes | Yes |
| ojk | www.ojk.go.id / sikapiuangmu.ojk.go.id | Institutions and alerts; HTTP + optional browser list | 4 | Yes | Yes |
| oss_nib | oss.go.id | NIB identity; Playwright | 3 | Yes | Yes |
| lpse | spse.inaproc.id and configured portals | Vendors/tenders; multi-portal HTTP | 4 | Yes | Yes |
| kpu | infopemilu.kpu.go.id / sirekap-obj-data.kpu.go.id | Candidates and 2024 elections; HTTP JSON | 4 | Yes | Yes |
| lhkpn | elhkpn.kpk.go.id | Wealth declarations; Playwright search, HTTP PDFs | 3 | Yes | Yes |
| bps | webapi.bps.go.id | Statistics; HTTP API, requires BPS_API_KEY | 3 | Yes | Yes |
| bmkg | data.bmkg.go.id | Earthquakes/weather; HTTP JSON/XML | 4 | Yes | Yes |
| simbg | simbg.pu.go.id and pilot portals | Permits; multi-portal HTTP | 3 | Yes | Yes |
| jdih | peraturan.go.id | Regulations; Playwright recent-list filtering | 2 | No | Yes |
| ksei | web.ksei.co.id | Securities and statistics links; HTTP HTML | 2 | No | Yes |
| djpb | data-apbn.kemenkeu.go.id | Budget themes; HTTP JSON | 2 | No | Yes |
JDIH, KSEI, and DJPB are available through the SDK and unified MCP server, but have no individual MCP server or REST router. JDIH search checks up to 50 recent listing links; KSEI securities fetch/search only inspect page 1. Neither is a complete registry search. LHKPN's browser search implementation does not prove that reCAPTCHA or the upstream portal works in your deployment.
Current portal liveness is unverified here. Historical March/April 2026 observations in endpoint status and geo-restrictions are troubleshooting context, not present-day health evidence. An HTTP 200 homepage, local /health, or passing mock/VCR test is not a successful live registry lookup.
pip install indonesia-civic-stack # Core HTTP SDK
pip install "indonesia-civic-stack[mcp]" # + unified MCP server pip install "indonesia-civic-stack[api]" # + FastAPI and uvicorn pip install "indonesia-civic-stack[browser]" # + Playwright and Camoufox pip install "indonesia-civic-stack[all]" # mcp + api + browser
Browser-backed operations also need binaries:
playwright install chromium
python -m camoufox fetch # AHU Camoufox path
AHU, OSS NIB, JDIH, LHKPN search, and OJK's full-list helper use browser paths. BPJPH's current scraper uses HTTP REST. all does not download browser binaries or include LHKPN's optional PDF packages. Install pdfplumber directly for PDF text extraction; the optional scanned-document fallback needs anthropic and ANTHROPIC_API_KEY, sends the document to an external API, and may incur cost. There are no pdf or playwright extras. SOCKS HTTP transport additionally requires pip install "httpx[socks]".
import asyncio
from civic_stack.bpom.scraper import search
async def main(): try: async with asyncio.timeout(120): records = await search("paracetamol") except Exception as exc: print("Could not verify:", type(exc).name) return if not records: print("No records returned; acquisition may be unverified") for record in records: print(record.status, record.found, record.source_url, record.fetched_at) if record.status == "ERROR": print("Could not verify:", record.result) elif record.found: print(record.result) # Check identity, period, and domain-specific status else: print("No match reported within the query scope; not proof of absence")
asyncio.run(main())
Every scraper has fetch() and search(), with module-specific signatures. Specialized helpers include BMKG's get_latest_earthquake, KPU's get_election_results, OJK's check_waspada, KSEI's get_statistics_links, and DJPB's get_budget_summary. See usage and limitations for actual return shapes, scope limits, and unified-tool wrapper caveats.
Core lookups return CivicStackResponse or lists of envelopes:
{
"result": {"product_name": "Example", "registration_status": "ACTIVE"}, "found": true, "status": "ACTIVE", "confidence": 1.0, "source_url": "https://cekbpom.pom.go.id/example", "fetched_at": "2026-03-14T06:30:00Z", "last_updated": null, "module": "bpom", "raw": null }
This is illustrative, not a live response. Status values are ACTIVE, EXPIRED, SUSPENDED, REVOKED, NOT_FOUND, and ERROR. Error details are under result.detail, not a top-level detail. Some helpers return raw lists/dicts, PDF extraction data, or URLs instead of envelopes; status shortcut MCP tools omit source and timestamp. Do not assume every tool has the full schema.
Check status, found, source_url, and fetched_at before reading result. Retrieval time is not publication time; verify the source's reporting period. `ERROR` is not `NOT_FOUND`. Current paths in several modules also collapse network/browser failures into NOT_FOUND or []. Consequently, an empty or not-found result alone cannot prove acquisition succeeded or that the record does not exist. BPS fetch() can raise for a missing key; other callers can also encounter unexpected exceptions. Catch exceptions at the caller boundary.
A found registration is not a general safety/legal guarantee. An alert-list match is a warning, not an endorsement. Partial multi-portal results and scraper confidence values must not be presented as exhaustive or authoritative checks.
civic-stack-mcp # stdio, 45 tools
python -m civic_stack.server # packaged equivalent civic-stack mcp # CLI stdio entry point python -m civic_stack.server --transport http --host 127.0.0.1 --port 8000
python -m civic_stack.bpom.server
For local clients, configure civic-stack-mcp as the command. The repository's .mcp.json uses .venv/bin/python -m civic_stack.server; create that virtual environment and install [mcp] before discovery. Discovery does not install dependencies or ensure portals respond. There is no shared hosted server.
| Module | Registered tool names |
|---|---|
| bpom | check_bpom, search_bpom, get_bpom_status |
| bpjph | check_halal_cert, lookup_halal_by_product, get_halal_status, cross_reference_halal_bpom |
| ahu | lookup_company_ahu, get_company_directors, verify_company_status, search_companies_ahu |
| ojk | check_ojk_license, search_ojk_institutions, get_ojk_status, check_ojk_waspada |
| oss_nib | lookup_nib, verify_nib, search_oss_businesses |
| lpse | lookup_vendor_lpse, search_lpse_vendors, search_lpse_tenders, get_lpse_portals |
| kpu | get_candidate, search_kpu_candidates, get_election_results_kpu, get_campaign_finance_kpu |
| lhkpn | get_lhkpn, search_lhkpn, get_lhkpn_pdf |
| bps | search_bps_datasets, get_bps_indicator, list_bps_regions |
| bmkg | get_bmkg_alerts, get_weather_forecast, get_earthquake_history, get_latest_earthquake |
| simbg | lookup_building_permit, search_permits_by_area, list_simbg_portals |
| jdih | search_jdih, get_jdih |
| ksei | search_ksei, get_ksei |
| djpb | search_djpb, get_djpb |
These are 45 registered names, not 45 independently validated operations. Some wrappers call generic scraper functions rather than the specialized helper suggested by the tool name; read wrapper caveats before using election-results, campaign-finance, tender, alert-list, or portal-list tools.
Verify registration offline, without calling tools:
python -c 'import asyncio; from civic_stack.server import mcp; print(len(asyncio.run(mcp.list_tools())))'
civic-stack api --host 127.0.0.1 --port 8000
uvicorn civic_stack.app:app --host 127.0.0.1 --port 8000 uvicorn civic_stack.bpom.app:app --host 127.0.0.1 --port 8001
The unified app mounts 11 routers. JDIH, KSEI, and DJPB have no REST routes. Open /docs or /openapi.json for the actual route signatures. Examples:
GET /bpom/search?q=paracetamol
GET /bpjph/search?q=kopi GET /ahu/search?q=Contoh GET /ojk/check/Bank%20BCA GET /kpu/search?q=Contoh GET /lhkpn/search?q=Contoh GET /bps/search?q=inflasi GET /bmkg/forecast/Jakarta GET /bmkg/earthquake/latest GET /simbg/search?q=Jakarta
/health only describes the local app; it does not probe upstream portals.
civic_client() reads PROXY_URL, with environment-based PROXY_MODE=connect or rewrite selection. A *.workers.dev URL auto-selects rewriting. Browser proxy handling is separate: a Worker rewrite URL is not a standard Chromium proxy, AHU and OSS-NIB fall back to PROXY_URL only in CONNECT mode, JDIH uses its explicit proxy argument, and LHKPN search does not forward its proxy_url argument to its browser. Do not assume setting an environment variable proxies every operation. See usage.
Whoever runs a proxy controls the portal responses the server receives. The REST routers and the standalone AHU/OSS-NIB MCP servers therefore accept a caller-supplied proxy_url only when it exactly matches PROXY_URL or an entry in CIVIC_ALLOWED_PROXIES (comma-separated full proxy URLs); anything else is rejected (HTTP 400 or an ERROR envelope). Configure proxies server-side.
Access can vary by deployment, endpoint, and time. Historical regional tests do not est
只显示了开头部分;其余内容请在仓库中阅读