mayanet-verify
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Mayanet Verify MCP
Stdio MCP that checks a volunteer against Colombian public sources (Croma) and stores a Pass / Alert / Fail report in an isolated Neon schema verify. It never reads or alters intake (public.volunteers).
License: MIT. LinkedIn is URL-normalize only — no profile fetch.
Quick path
npm install(Node 20+).Put a verify-scoped Postgres URL and a Croma key in
.env(copy.env.example).Apply schema once:
psql "$DATABASE_URL" -f sql/001_verify_schema.sqlPoint Cursor at this repo (stdio block below) and reload MCP.
Call
verify_volunteerwithvolunteer_id: "verify-operator-001"after the document is bound.
Expected: a JSON report with overall_status and per-check statuses. Seed fixture is Example Operator / CC 1000000000 / id verify-operator-001.
Related MCP server: checkyourself
Explain
Topic | Decision |
Who uses it | Any MCP client (Cursor, Claude). No GUI in this repo. |
Data plane | Schema |
Colombia | Croma REST ( |
Store/normalize a URL. | |
Orchestrator |
|
Out of scope: UI, WhatsApp/email, numeric scores, biometrics, LinkedIn scraping, Registraduría, bulk-copy of intake rows.
Stand up
Requirements
Node.js 20+
DATABASE_URL— Postgres role that can DMLverifyonlyCROMA_API_KEY— org bearer (croma_live_…)psqlonce, to apply SQL
DATABASE_URL=<verify-scoped-postgres-url>
CROMA_API_KEY=<croma-api-key>Do not commit .env. Runtime never runs DDL.
Schema (once)
psql "$DATABASE_URL" -f sql/001_verify_schema.sqlCreates verify.volunteers, verify.verification_requests, verify.verification_reports, and seeds verify-operator-001. Re-apply is safe (ON CONFLICT (document_number) DO NOTHING).
Rollback: DROP SCHEMA verify CASCADE. Never ALTER public.volunteers.
Cursor (stdio)
npm install, then user ~/.cursor/mcp.json or project .cursor/mcp.json:
{
"mcpServers": {
"mayanet-verify": {
"command": "npx",
"args": ["tsx", "src/index.ts"],
"cwd": "/absolute/path/to/mallanet-verify",
"env": {
"DATABASE_URL": "<verify-scoped-postgres-url>",
"CROMA_API_KEY": "<croma-api-key>"
}
}
}
}Missing env aborts before tools register. Reload MCP after edits.
Smoke (stdin close exits 0 if env is set):
printf '' | DATABASE_URL="<verify-scoped-postgres-url>" CROMA_API_KEY="<croma-api-key>" npx tsx src/index.tsOperate
First verify (seed)
The SQL seed is already bound (document_number = 1000000000). After MCP is live:
list_pending_volunteers{ "limit": 20, "status_filter": "pending" }— expectverify-operator-001until a report exists.get_volunteer{ "volunteer_id": "verify-operator-001" }— confirm the row.verify_volunteer{ "volunteer_id": "verify-operator-001" }— Croma + persist.
To bind a different person (never commit a real cédula):
{
"volunteer_id": "verify-operator-001",
"document_type": "CC",
"document_number": "<document-number>",
"linkedin_url": "https://www.linkedin.com/in/example"
}That is request_verification_data. Then verify_volunteer again. Without document_number the orchestrator throws identity unbound. Unknown id throws volunteer not found.
Tools
Tool | Required | Optional | Role |
| — |
| Rows in |
|
| — | One row |
|
|
| Bind identity; never logged |
| — |
| Croma only; RUES if NIT/employer |
|
|
| Normalize URL; |
|
| — | Croma + persist (same persist path as orchestrator) |
|
| — | Request row + persist report |
Report shape
{
"volunteer_id": "verify-operator-001",
"name": "Example Operator",
"overall_status": "Pass",
"checks": {
"judicial": "Pass",
"criminal_records": "Pass",
"procuraduria": "Pass",
"rues": "N/A",
"linkedin_consistency": "Alert"
},
"findings": [],
"linkedin_summary": { "headline": "", "experience": [], "education": [] },
"timestamp": "2026-08-16T00:00:00.000Z"
}Heuristics
Check | Pass | Alert | Fail |
Policía / Procuraduría |
| upstream error |
|
Rama Judicial | no cases | any cases or error (name search; never auto-Fail) | — |
RUES | found and employer matches | not found, mismatch, or error | — |
RUES skipped | — | — |
|
— | always, until consented OAuth | — |
Overall: any Fail → Fail; else any Alert → Alert; else Pass. N/A is ignored. One source failing does not abort the others.
Limits and failures
Croma default quota is 100 requests/day/org. One
verify_volunteeris several calls.Policía can take ~55s (202 poll in-process). Host MCP timeouts may fire first.
Logs may include
volunteer_idand document type. They must never includedocument_number.
Tests
npm testNo live Croma in CI. Isolation tests assert the SQL never touches public.
Checklist
.envset, not committedsql/001_verify_schema.sqlapplied to a verify-scoped databaseCursor MCP reloaded; tools visible
get_volunteerreturnsverify-operator-001verify_volunteerreturnsoverall_status+checksnpm testis green
Related MCP Connectors
MCP server for CertScore.ai public website risk-signal workflows.
MCP deployment checks: required tools, schema drift and verifiable receipts. Free preflight.
A paid remote MCP for Skybridge, built to return verdicts, receipts, usage logs, and audit-ready JSO
A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for sanctions screening and PEP checks via OpenSanctions API. Search entities, match against 320+ sanctions lists, and run compound compliance investigations with AI agents.640 npmMIT
- AlicenseAqualityBmaintenanceLocal-first production-readiness MCP server for AI-built apps. It runs read-only checks, produces an evidence-based readiness score, and guides fixes before launch.117 npm7Apache 2.0
- FlicenseNot gradedqualityDmaintenanceMCP server for scanning AI systems and code for demographic, occupational, and geographic biases. Enables CI integration and AI agent-driven bias detection.-
- FlicenseNot gradedqualityDmaintenanceMCP server for Peruvian government data, enabling search and anomaly detection in public procurement (OSCE) and legislative tracking (Congress), plus semantic search over both domains.-