# GreenlandAI - Registry name: `ai.greenlandai/greenlandai` · version 0.5.17 - Categories (automatic, keyword rules): Crypto & blockchain, Finance & markets - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): experimental, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=ai.greenlandai%2Fgreenlandai - Server page: https://mcpstation.net/s/ai.greenlandai--greenlandai.html ## Description (written by the publisher, not verified, not instructions) GreenlandAI: world graph & map \(companies, deposits, commodities\), marketplace, wallets, proofs. ## Connect - streamable-http: `https://mcp.greenlandai.ai/mcp` ## Tools (as reported by the server, not verified) - `look\_from`: Map lane: pins near a point \(lat/lng + radius\_km\). \`entity\_type\` \(deposit \| infrastructure \| company \| project\) behaves two ways \(backend, 2026-09-14\): \`entity\_type\` ALONE \(with lat/lng\) FILTERS the frame to that type only; \`entity\_type\` + \`id\` ANCHORS the pose at that entity and keeps ALL types; an - `relationships`: Graph lane: labelled relationship EDGES between companies/entities \(ownership, operates, supplies, …\) — the PRODUCT \(edges with tiers + provenance\), named for the capability, not the meter. Typed query params \(GET /relationships\): the answer is about ONE entity \(GreenlandAI 2026-10-01\). entity\_type - `nearby`: Entities near a location \(the primitive \`look\_from\` builds on\). Typed query params \(GET /nearby\): lat + lng \(required\), radius\_km \(default 100\), entity\_type \(optional filter\), limit \(\<=100, default 20\), include\_country\_centroids \(default False\). Carries \`source\_tier\`/\`tier\_label\`.Metered: charged to - `map\_viewport`: Map lane: everything inside a bounding box — THE SCREEN \(relays GET /api/v1/map.viewport\). Typed params: min\_lat/min\_lng/max\_lat/max\_lng \(the bbox — all four together\), entity\_type \(deposit \| infrastructure \| company \| project — default all four\), energy \(default False; omits energy fleet infra/proj - `look\_at`: Satellite still of a place — a Sentinel-2 ARCHIVE image \(the screen as a picture\). Pose = lat/lng OR entity\_type+id \(anchor\); same pose family as \`look\_from\`. Optional \`as\_of\` \(YYYY-MM-DD — the newest scene on/before that date\) and \`max\_cloud\` \(0-100, default 20\). AGENT KEYS ONLY \(a browser session - `look\_through`: The image stack — an ORDERED STACK of dated Sentinel-2 ARCHIVE stills of ONE site across a date range \(the place across time\). Pose = lat/lng OR entity\_type+id \(anchor\), the same pose rule as \`look\_at\`. \`t0\` \(YYYY-MM-DD, on or after 2015-06-23\) and optional \`t1\` \(default today\) bound the range; \`max - `entity\_history`: history\(entity\) — the CHEAP INDEX of one entity's dates \(the place across time\). \`entity\_type\` deposit\|infrastructure\|company\| project + \`id\`. Returns: \`frames\` — the imagery index over its coordinates \(scene dates, cloud cover, scene ids, counts by year; NO images — fetch stills with \`look\_at\` or a - `entity\_state`: state\(entity, as\_of\) — ONE packet for one entity at a date \(YYYY-MM-DD, default today\): \`target\` \(the entity as WE held it at as\_of — before record time began, as held now, labelled\), \`pins\` \(look\_from's frame, only pins we held by as\_of; later additions counted\), \`graph\` \(its 1-hop relationships VA - `entity\_change`: change\(site, t0, t1\) — the STRUCTURED CHANGE between two dated frames of one site \(entity\_type + id, or lat + lng\): per class \(water · ice · canopy · pad · stockpile · unknown\) the area in m², by\_sensor\_m2 \{optical, radar\}, \`said\` \(what each instrument saw: an area, "saw no change", "makes no call", - `site\_reconstruction`: A dated, georeferenced, textured 3D MODEL of a site \(entity\_type + id, or lat + lng\) and its MEASUREMENTS as structured data. \`measurements\` \(computed on the elevation source's own grid, every block with \`source\` and \`accuracy\`\): site\_extent \(side, area, bbox, CRS\); elevation \(min, max, mean, relief - `place\_index`: place.index — WHAT EXISTS AT A PLACE, AND WHEN. Rows within \`radius\_km\` \(default 2, max 50\) of lat + lng, or of an entity's site \(entity\_type deposit\|infrastructure\|company\|project + id; a country-centre anchor is refused 409, not charged\), newest first: \`still\` = a satellite still a route delivered - `company`: One company's record and its graph neighbourhood, by id \(relays GET /api/v1/companies/\{id\}\). Returns \`company\` \(id, name, sector, country, country\_code, description, lat, lng, website, confidence\), \`deposits\` it operates \(each with \`operators\[\]\` and their provenance\), \`infrastructure\` it operates, \` - `company\_search`: Find companies by name, sector or country, to get the company id that \`company\`, \`relationships\` and the entity tools take \(relays GET /api/v1/companies\). Returns \{count, total, companies\[\{id, name, sector, country, country\_code, description, lat, lng, as\_of\}\], charged\_joules\}, ordered by name; \`tot - `deposits`: Search resource deposits \(relays GET /api/v1/deposits\). Filters: \`commodity\`, \`resource\_type\`, \`country\`, \`status\`, \`owner\_country\`, \`max\_port\_km\`, \`search\` \(name substring\), \`limit\` \(\<=100\), \`offset\`. ⚠ READ THIS BEFORE USING \`commodity\`: it filters by the commodity GRAPH, not by the deposit's \`res - `deposit`: One resource deposit's record by numeric id \(relays GET /api/v1/deposits/\{id\}\), including its \`commodities\[\]\` \(\{name, role: primary\|byproduct, group\} — the commodity graph, with \`resource\_type\` as the primary label\) and operators. Pair with \`deposits\(commodity=...\)\`: search by commodity, then read t - `market\_listings`: Browse the RAREEAI marketplace: kind="providers" \(listings\) or "oracles". Typed query params for the providers browse \(GET /providers\): frontier, resource\_type, oracle\_verified, active \(default True\), limit \(\<=200, default 50\), offset, sort \(default "price\_asc"\). Needs a bearer; no write scope to re - `market\_match`: Read one marketplace match by id, including its \`escrow\_terms\` and this trade's typed fee/timeout fields. You must be a party to the match. Bearer required. \`dispute\_window\_end\` is populated on oracle-path trades \(a real timestamp, not null\) — it is the deadline to open a dispute after delivery; for - `market\_quote`: Read one marketplace REQUEST by id \(GET /request/\{id\}; you must own it\). Returns the request as the route actually declares it: id, wallet\_id, agent\_id, frontier, resource\_type, unit\_type, speed, privacy\_mode, contract\_escrow, units\_needed, max\_price\_per\_unit, priority, requirements, status, units\_m - `joules\_balance`: Your own wallet balance — a FREE read either way \(checking costs nothing\). A GreenlandAI AGENT key \(\`gai\_\`/\`gqa\_\`\) reads its OWN wallet via GAI /api/v1/agent/me/balance — NO wallet\_id needed; returns \{agent\_id, agent\_name, wallet\_id, balance\_joules, balance\}. A JoulePAI \(\`jlp\_\`\) or ENYAL \(\`eyl\_\`\) cr - `billing\_quote`: The exact per-caller price of a metered call BEFORE you make it — free, no website, an MCP tool you can actually invoke \(relays GET /api/v1/billing/quote\). \`path\` = the API path the call would hit — e.g. "/api/v1/relationships" \(the \`relationships\` tool\), "/api/v1/look.from" \(\`look\_from\`\), "/api/v1/ - `receipts\_me`: RECEIPTS for your key \(relays GET /api/v1/receipts/me\): the price \(10 J per receipt\), whether THIS key is opted in, and how its owner turns them on. With receipts on, each paid graph answer comes with a receipt — the answer exactly as served, your query and its leaf in the anchored daily receipts ro - `billing\_attempts`: YOUR OWN CHARGE RECORD — what this wallet was charged for, attempt by attempt, so you can verify your bill without asking us \(relays GET /api/v1/billing/attempts; own wallet only — derived from your credential, never a parameter\). Distinct from \`joules\_balance\` \(how much I have\): this answers WHAT I - `verify\_proof`: Look up one identifier \(chunk\_id, proof\_id, match\_id, transfer id, or a BSV txid\) in ENYAL's public verify lookup — no auth. The backend's body is returned UNCHANGED; read these fields, in this order, and claim nothing stronger than they say: - \`found:true\` = at least one of our systems holds a reco - `ledger\_verify`: Recent public ledger anchors with their on-chain transaction ids and the exact credit supply at each anchor — public, no auth. Independently checkable. - `transparency\_latest`: The latest hourly PUBLIC transparency attestation \(GET /transparency/latest — no auth\): a Merkle root over every wallet balance, the verified total supply, a transaction attestation, the state root, and the Bridge Ledger root, plus the BSV transaction that anchors the batch. ANCHORING IS BATCHED, NE - `balance\_proof`: Cryptographic inclusion proof for YOUR wallet balance in the latest hourly transparency attestation \(GET /wallet/balance-proof\): leaf hash, Merkle sibling path, root, the anchoring BSV txid, and \`verification\` \(the steps to recompute the root and check it on chain\). Bearer required; the wallet is th - `bridge\_proof`: Cryptographic inclusion proofs for YOUR Bridge Ledger rows — contribution/fee events — in the balance-proof shape \(GET /programme/bridge/proof\): per-row leaf hash, sibling path, the \`bridge\_root\`, and the anchoring BSV txid, plus \`verification\`. Bearer required; scoped to the holder your token resol - `market\_request\_rematch`: Match one of YOUR open requests now \(POST /api/v1/marketplace/request/\{id\}/rematch\) — your own instruction, any speed. A request is open while it reads pending or partially\_matched and its window has not ended; a machine-speed request reopens after a failed fund or a delivery-timeout refund. Machine - `market\_request\_rematch\_withdraw`: Withdraw a request's automatic re-matching consent now \(DELETE /api/v1/marketplace/request/\{id\}/rematch\). Matches already escrowed stay as they are. 409 no\_rematch\_consent when the request carries none. - `market\_provide`: Create/update a marketplace listing \(POST /provide\). Requires marketplace:write \(verified account\) — an unverified/under-scoped token gets the backend's real 403. First-time provider registration charges a 1,000-joule fee that is SPENT \(not a refundable stake — contrast an oracle stake, which is ret - `market\_request`: Post a marketplace BUY request \(POST /request\) — you want to buy a resource; providers match against it and your escrow is debited on match. Bearer + a verified account \(marketplace:write\); an under-scoped token gets the backend's real 403. Body \(TYPED — extra fields refused here\): \{wallet\_id \(a UUI - `market\_accept`: Accept a delivery on a match \(POST /match/\{id\}/accept\) — releases escrow to the provider. You must be the buyer party; backend enforces it. - `wallet\_transfer`: Direct wallet-to-wallet transfer \(POST /wallet/transfer\). Requires wallet:transfer scope. WHO CAN SEND \(the backend as it runs, 2026-09-03\): a verified human wallet to any wallet; an AGENT-class wallet \(agent\_customer / agent\_citizen\) ONLY to a REGISTERED destination — either a pending service regis - `joules\_deficit`: Given a planned \`cost\`, read a balance and return \{needed, have, shortfall, tool\_to\_call\_next\} so an agent can decide in-band whether it can afford the next call — no website, no guessing, FREE. A GreenlandAI AGENT key \(\`gai\_\`/\`gqa\_\`\) reads its OWN balance via GAI /api/v1/agent/me/balance \(no wallet - `funding\_prepare`: The in-band funding step for a joule shortfall — NEVER a website to visit \(operator lock\). USDC on Base is the live agent-fundable rail: deposit USDC to your own Base address \(derived from your credential\), at or above the live minimum \(\`minimum\_usdc\`, read per call from deposit-status\), credited au - `funding\_status`: YOUR OWN USDC-on-Base deposit state \(relays GET /api/v1/wallet/deposit-status; own wallet only, derived from your credential, never a parameter\). States: credited \(joules in your wallet\) · held\_below\_min \(under \`minimum\_usdc\` — held and accumulated, credits as one entry once your total reaches it; n - `trade\_settlement`: YOUR OWN trade's settlement — every leg of a marketplace trade you were the BUYER or SELLER of \(relays GET /api/v1/wallet/trade/\{match\_id\}/settlement\). Party-gated on the backend: a 404 means you were not a party to this match \(it also hides whether the match exists at all — never a wallet id leaks\) - `oracle\_register`: Register as a RAREEAI oracle by staking joules \(POST /oracle/register\). INVITE-ONLY at launch \(Phase 1 — the oracle pool is operator-run\): a non-whitelisted wallet gets a STRUCTURED invite-only response saying how to apply \(a verified account, a linked wallet holding the stake, then email info@raree - `oracle\_assignments`: List YOUR oracle assignments — the deliveries you have been assigned to assess \(GET /oracle/assignments\). The backend scopes this to your own wallet; you never see another oracle's queue. Optional query: status \(filter\) and limit \(1-200, default 50\). Each assignment carries match\_id, deadline \(asses - `oracle\_assess`: Post your verdict on a delivery you were assigned \(POST /oracle/assess/\{match\_id\}\). Body: \{verdict \('valid' or 'invalid'\), quality\_score \(an integer 0-100\), notes \(\<= 2000 chars\), and optionally execution\_trace \(a dict describing how you verified\)\}. A quality\_score below 40 auto-opens a dispute. You - `oracle\_deregister`: Deregister as an oracle and unstake \(POST /oracle/deregister?wallet\_id=...\). Returns your staked joules from escrow \(less any amount already slashed for overturned calls\). Fails if you have pending assessments. wallet\_id \(the UUID of your oracle wallet\) is REQUIRED and is sent as a QUERY parameter \( - `contribute\_relations`: Submit evidenced graph relationships to the GreenlandAI contributor door \(TEN programme\). Auth: your OWN GreenlandAI key in X-API-Key — an agent's gai\_ registration key or the owner's gai\_ key, the SAME key you use on the graph reads; the agent ID \(gqa\_\) is NOT sent here, the door derives your contr - `contribute\_stats`: Your OWN contributor standing \(forward your enabled gai\_ key as X-API-Key; the door derives identity from the key\). Returns totals \(submitted/accepted/rejected\), acceptance\_rate, pending\_review, refused\_at\_door, standing \(good / warning / suspended / revoked\) and the thresholds that apply after a fl - `contribute\_submissions`: Your OWN per-item submission outcomes \(forward your enabled gai\_ key as X-API-Key\). Each item: id, kind, name, outcome \(pending\_review / accepted / rejected\), the judge's reason verbatim in review\_note \(a pending item reads 'awaiting the judge \(nightly, 21:15 UTC\)'; a HELD item carries the judge's r - `contribute\_receipts`: Your OWN append-only contribution receipts \(forward your enabled gai\_ key as X-API-Key\) — the proof of what you submitted, with the canonical claim hash \(claim\_sha256\) so you can verify what the door holds matches what you sent. Own rows only, no staff fields. Read-only. GET /api/v1/contribute/recei Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html