gridpin/gridpin

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/gridpin--gridpin.svg).

mcp-server

Works

README claims checked out on 2 recorded setups. Untested combinations remain unknown.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 23, 2026 · e0198608f167 · claude-code / 2.1.300 (Claude Code)
Recorded operation: <guest-path> · local stdio MCP start + initialize + tools/list

Linux / Luna: yes · Oct 23, 2026 · e0198608f167 · codex / codex-cli 0.163.0
Recorded operation: gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

Does what it says
1 of 1 claims checked out
  • Forward lookup returns coordinates and address detail.: Real input produced the expected result: Rue de la Paix

    Source: $ gridpin query france.bin "1 rue de la Paix Paris" -k 3

    Input: 1 rue de la Paix Paris

    Expected: Rue de la <email>, 2.33031

    Command: gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

    Observed: Rue de la Paix","housenumber":"1","commune":"Paris 2e Arrondissement","postcode":"75002","flags":["street_exact","commune_prefix","house_rep"]}

MCP
Documented only
Local or hosted
both local and hosted
Both a local install and a hosted service
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 7 days ago; 21 commits and 0 merged PRs in 90 days; 0 open issues, 0 open PRs; latest release 2026-10-11

Last commit Oct 16, 2026

Setup time
3 min 49 s
3 min 49 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • README CLI forward geocoding quick start: command completed successfully

    Source: README.md / Quick start / CLI

    Input: 1 rue de la Paix Paris

    Expected: Rue de la Paix coordinates and address details

    Command: gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

    Observed: {"lat":48.868546,"lon":2.33031,"precision":"house","score":0.08887005,"confidence":0.84,"street":"Rue de la Paix","housenumber":"1","commune":"Paris 2e Arrondissement","postcode":"75002","flags":["street_exact","commune_prefix","house_rep"]}

Evidence
README behavior checked
Agent interfaces
CLI, MCP (documented only)
CLI, MCP (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Codex / Luna
  • Linux: Codex / Luna · agent codex-cli 0.163.0 · Checked operation passed · Oct 23, 2026 on e0198608f167

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
Something to look at: writes outside the project folder by <guest-path>, <guest-path>

Review signals across current setups: connection review, outside write. 4 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 8 distinct locations. 1 attributed processes.

PID 4686: <guest-path> · tests

Gitleaks found a possible hardcoded secret; value withheld. prep/de_build.py 2 findings.

Repository processes attempted these writes outside documented output/cache paths. /dev/fd/9 4 attributed processes.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> · local stdio MCP start + initialize + tools/list

MCP server returned: gridpin · version 0.1.0.

MCP tools returned: list_countries, download_sheet, geocode, reverse, batch. Tool listing does not establish authenticated tool-call success.

Run details
run
gridpin--gridpin-claude-haiku-5-5-1792779867077218910
date
Oct 23, 2026
time to working
346.8s
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.041375
Recorded source
https://github.com/gridpin/gridpin
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "e0198608f167ce76990177557e57409ebca39993", "url": "https://github.com/gridpin/gridpin"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
e0198608f167ce76990177557e57409ebca39993
Whose fault: no fault assigned · resolved

Safety: Review signals: 1 connection review, 2 hardcoded secret.

Review signals: 1 connection review, 2 hardcoded secret.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 8 distinct locations. 1 attributed processes.

PID 4686: <guest-path> · tests

Gitleaks found a possible hardcoded secret; value withheld. prep/de_build.py 2 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • The CLI lists the country sheets GridPin offers, including Serbia (rs).: Real input produced the expected result: Serbia

    Source: Countries: `br` `de` `es` `fr` `it` `nl` `rs` (`gridpin-fetch --list`). For AI agents there is an

    Input: gridpin-fetch --list

    Expected: a list of countries that includes Serbia

    Command: <guest-path> --list

    Observed: Serbia 32 MB downloaded sheets directory: <guest-path>

  • The gridpin CLI forward-geocodes a French address against the France sheet and returns a house-level match.: Real input produced the expected result: Rue de la Paix

    Source: $ gridpin query france.bin "1 rue de la Paix Paris" -k 3

    Input: 1 rue de la Paix Paris, against france.bin

    Expected: a house-precision candidate on Rue de la Paix

    Command: <guest-path> query <guest-path> '1 rue de la Paix Paris' -k 3

    Observed: Rue de la Paix","housenumber":"1","commune":"Paris 2e Arrondissement","postcode":"75002","flags":["street_exact","commune_prefix","house_rep"]}

  • After a sheet is downloaded, geocoding runs from the local file: the MCP server returns a house-level Serbian address match.: Real input produced the expected result: Kneza Mihaila

    Source: Everything after the download runs offline.

    Input: {"tool": "geocode", "arguments": {"query": "Knez Mihailova 5, Beograd", "country": "rs"}}

    Expected: a house-precision result on Kneza Mihaila

    Command: <guest-path> tools/call {"tool": "geocode", "arguments": {"query": "Knez Mihailova 5, Beograd", "country": "rs"}}

    Observed: Kneza Mihaila\",\n \"housenumber\": \"5\",\n \"commune\": \"Stari Grad\",\n \"postcode\": \"\",\n \"confidence\": 0.9399999976158142,\n \"flags\": [\n \"street_exact\",\n \"commune_exact\",\n \"house_rep\"\n ]\n }\n ]\n}", "type": "text"}], "isError": false, "structuredContent": {"country": "rs", "query": "Knez Mihailova 5, Beograd", "results": [{"lat": 44.8154522, "lon": 20.4593897, "precision": "house", "score": 5.5504302978515625, "confidence": 0.9399999976158142, "street": "Kneza Mihaila", "commune": "Stari Grad", "postcode": "", "hous

Examples

  • Batch-geocode five French addresses with the Python binding against the France sheet: command completed successfully

    Source: examples/README.md (batch.py: python batch.py /path/to/france.bin)

    Input: examples/batch.py with the downloaded france.bin

    Expected: JSON with one result per address, e.g. 10 rue de Rivoli resolves to Rue de Rivoli

    Command: <guest-path> examples/batch.py <guest-path>

    Observed: "commune_exact", "house_rep", "pc_exact" ] } ] }, { "query": "16 rue de la Monnaie, 59800 Lille", "results": [ { "lat": 50.640827, "lon": 3.063621, "precision": "house", "score": 7.2687788009643555, "street": "Rue de la Monnaie", "housenumber": "16", "commune": "Lille", "postcode": "59800", "confidence": 0.949999988079071, "flags": [ "street_exact", "commune_exact", "house_rep", "pc_exact" ] } ] } ]

  • The MCP package's offline test suite passes: command completed successfully

    Source: mcp/tests (CI runs python -m pytest in this layout)

    Input: python -m pytest mcp/tests -q

    Expected: 15 passed; 16 skipped because the Monaco test sheet (make mc) is not built

    Command: <guest-path> -m pytest mcp/tests -q

    Observed: sss.............sssssssssssss.. [100%] 15 passed, 16 skipped in 3.10s

  • Photon-compatible loopback HTTP facade for a sheet: Left out on purpose: it is a loopback interop adapter for geocoder-tester runs and needs the CLI binary plus a long-running server; core geocoding was exercised through the MCP probe, CLI and batch example instead.

    Source: examples/README.md (gridpin_http.py)

    Expected: documented command completes successfully

    Observed: Left out on purpose: it is a loopback interop adapter for geocoder-tester runs and needs the CLI binary plus a long-running server; core geocoding was exercised through the MCP probe, CLI and batch example instead.

  • Streamlit live demo and Colab quickstart: Left out on purpose: a UI demo needing Streamlit and a browser or Colab; no browser was installed or used.

    Source: examples/README.md (streamlit/, colab_quickstart.ipynb)

    Expected: documented command completes successfully

    Observed: Left out on purpose: a UI demo needing Streamlit and a browser or Colab; no browser was installed or used.

  • Data-build and benchmark pipeline (prep/, make mc, make smoke): Not run: building the Monaco and country sheets needs the OSM/Overture source downloads and the DuckDB pipeline, which is outside the install-and-query path; the Monaco sheet is missing so 16 mcp tests skip.

    Source: Makefile smoke and mc targets

    Expected: documented command completes successfully

    Observed: Not run: building the Monaco and country sheets needs the OSM/Overture source downloads and the DuckDB pipeline, which is outside the install-and-query path; the Monaco sheet is missing so 16 mcp tests skip.

Local or hosted: both

Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

Agent-reported scope: Build the Rust CLI, download the France sheet, and forward-geocode a Paris address

Run details
run
gridpin--gridpin-gpt-6-luna-1792780270049141118
date
Oct 23, 2026
time to working
229.4s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/gridpin/gridpin
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "e0198608f167ce76990177557e57409ebca39993", "url": "https://github.com/gridpin/gridpin"}
Test version
readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf
revision
e0198608f167ce76990177557e57409ebca39993
Whose fault: no fault assigned · resolved

Safety: Review signals: 2 hardcoded secret, 1 outside write.

Review signals: 2 hardcoded secret, 1 outside write.

Gitleaks found a possible hardcoded secret; value withheld. prep/de_build.py 2 findings.

Repository processes attempted these writes outside documented output/cache paths. /dev/fd/9 4 attributed processes.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Forward lookup returns coordinates and address detail.: Real input produced the expected result: Rue de la Paix

    Source: $ gridpin query france.bin "1 rue de la Paix Paris" -k 3

    Input: 1 rue de la Paix Paris

    Expected: Rue de la <email>, 2.33031

    Command: gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

    Observed: Rue de la Paix","housenumber":"1","commune":"Paris 2e Arrondissement","postcode":"75002","flags":["street_exact","commune_prefix","house_rep"]}

Examples

  • README CLI forward geocoding quick start: command completed successfully

    Source: README.md / Quick start / CLI

    Input: 1 rue de la Paix Paris

    Expected: Rue de la Paix coordinates and address details

    Command: gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1

    Observed: {"lat":48.868546,"lon":2.33031,"precision":"house","score":0.08887005,"confidence":0.84,"street":"Rue de la Paix","housenumber":"1","commune":"Paris 2e Arrondissement","postcode":"75002","flags":["street_exact","commune_prefix","house_rep"]}

Local or hosted: both

What the agent did

Build the Rust CLI, download the France sheet, and forward-geocode a Paris address

pwd; vault-search 'gridpin README operation'; ls -la; rg --files -g 'AGENTS.md' -g 'README*' -g 'pyproject.toml' -g 'package.json' -g '*.md' | head -100; cat <host-path> 2>/dev/null; cat ~/.agents/skills/i-have-adhd/SKILL.md 2>/dev/null; cat ~/.agents/skills/ponytail/SKILL.md 2>/dev/null; cat ~/.agents/skills/p3-mode/SKILL.md 2>/dev/null
cat README.md; find .. -name AGENTS.md -o -name START-HERE.md; python3 --version; id -u; sed -n '1,160p' Makefile
find . -maxdepth 3 -type f | sort | head -150; ls -la .coldpass; git status --short; git rev-parse HEAD 2>/dev/null; python3 -m pip --version; command -v cargo; command -v curl
cat mcp/README.md; cat examples/README.md; cat gridpin/pyproject.toml; cat mcp/pyproject.toml; sudo -n apt-get update && sudo -n apt-get install -y python3-pip python3-venv cargo rustc;
python3 -m venv /tmp/gridpin-venv && /tmp/gridpin-venv/bin/python -m pip install gridpin gridpin-mcp
cd <guest-path> && GRIDPIN_HOME=/tmp/gridpin-home /tmp/gridpin-venv/bin/gridpin-fetch fr
cd <guest-path> && GRIDPIN_HOME=/tmp/gridpin-home /tmp/gridpin-venv/bin/python -c 'import gridpin; print(gridpin.Geocoder("/tmp/gridpin-home/v0.4.0/france.bin").geocode("1 rue de la Paix, Paris", 1))'
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["/tmp/gridpin-venv/bin/python","-c","import gridpin; print(gridpin.Geocoder('/tmp/gridpin-home/v0.4.0/france.bin').geocode('1 rue de la Paix, Paris', 1))"],"cwd":"<guest-path>","expected_text":"Rue de la Paix"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"The quick start geocodes a Paris address and returns its coordinate.","source":"g.geocode(\"1 rue de la Paix, Paris\", 1)","input":"1 rue de la Paix, Paris","expected":"Paris house result with latitude and longitude","probe_kind":"cli","argv":["/tmp/gridpin-venv/bin/python","-c","import gridpin; print(gridpin.Geocoder('/tmp/gridpin-home/v0.4.0/france.bin').geocode('1 rue de la Paix, Paris', 1))"],"expected_text":"Rue de la Paix","cwd":"<guest-path>"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"README Python quick start forward geocoding","source":"README.md / Quick start / Python","input":"1 rue de la Paix, Paris","expected":"Paris address coordinates","argv":["/tmp/gridpin-venv/bin/python","-c","import gridpin; print(gridpin.Geocoder('/tmp/gridpin-home/v0.4.0/france.bin').geocode('1 rue de la Paix, Paris', 1))"],"cwd":"<guest-path>","expected_text":"Rue de la Paix"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"GridPin is a request-driven geocoder; README entry points expose individual queries, and no product scheduler or cycle was found.","checks":[]}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cd <guest-path> && /tmp/gridpin-venv/bin/gridpin-fetch --help; /tmp/gridpin-venv/bin/python -m gridpin --help; ls gridpin/target/release/gridpin
cd <guest-path> && cargo build --release --manifest-path gridpin/Cargo.toml
cd <guest-path> && /tmp/gridpin-venv/bin/pip show gridpin; /tmp/gridpin-venv/bin/python -m pip install maturin
cd <guest-path> && ls -l /tmp/gridpin-home/v0.4.0/france.bin && /tmp/gridpin-venv/bin/python -m maturin --version && rustc --version && cargo --version
curl -fsSL https://sh.rustup.rs -o /tmp/rustup-init.sh && sh /tmp/rustup-init.sh -y --profile minimal --default-toolchain stable
cd <guest-path> && PATH=<host-path> cargo build --release --manifest-path gridpin/Cargo.toml
cd <guest-path> && <host-path> --version; <host-path> --version; head -8 gridpin/Cargo.lock
find /tmp <host-path> -path '*/.cargo/bin/cargo' -o -path '*/.cargo/bin/rustc' 2>/dev/null; env | sort | grep -E 'HOME|RUSTUP|CARGO'
cd <guest-path> && PATH=<guest-path> cargo build --release --manifest-path gridpin/Cargo.toml
cd <guest-path> && gridpin/target/release/gridpin query /tmp/gridpin-home/v0.4.0/france.bin '1 rue de la Paix Paris' -k 1
cd <guest-path> && cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["gridpin/target/release/gridpin","query","/tmp/gridpin-home/v0.4.0/france.bin","1 rue de la Paix Paris","-k","1"],"cwd":"<guest-path>","expected_text":"Rue de la Paix"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Forward lookup returns coordinates and address detail.","source":"$ gridpin query france.bin \"1 rue de la Paix Paris\" -k 3","input":"1 rue de la Paix Paris","expected":"Rue de la <email>, 2.33031","probe_kind":"cli","argv":["gridpin/target/release/gridpin","query","/tmp/gridpin-home/v0.4.0/france.bin","1 rue de la Paix Paris","-k","1"],"expected_text":"Rue de la Paix","cwd":"<guest-path>"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"README CLI forward geocoding quick start","source":"README.md / Quick start / CLI","input":"1 rue de la Paix Paris","expected":"Rue de la Paix coordinates and address details","argv":["gridpin/target/release/gridpin","query","/tmp/gridpin-home/v0.4.0/france.bin","1 rue de la Paix Paris","-k","1"],"cwd":"<guest-path>","expected_text":"Rue de la Paix"}]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cd <guest-path> && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Build the Rust CLI, download the France sheet, and forward-geocode a Paris address","operation_scope":"Python 3.12.3 venv for documented gridpin/gridpin-mcp installation; stable Rust installed in the guest to support the README source-build command","steps":["Read README quick start and install instructions","Installed python3-pip, python3-venv, cargo and rustc with apt","Created /tmp/gridpin-venv and installed gridpin and gridpin-mcp with pip","Ran gridpin-fetch fr and verified the package returned the France sheet path","Installed stable Rust using the rustup installer after system Cargo 1.75 could not parse Cargo.lock format 4","Ran cargo build --release --manifest-path gridpin/Cargo.toml successfully","Ran the README CLI forward query; returned Rue de la Paix, house 1, Paris, lat 48.868546 lon 2.33031","Validated and replayed .coldpass/probe.json, claims.json, examples.json and cycles.json successfully"],"deviations":["Initial system Cargo 1.75 failed: lock file version 4 requires -Znext-lockfile-bump; installed stable Rust 1.99.1 and rebuilt successfully"],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
cat .coldpass/report.json; ls -la .coldpass