{"server":{"name":"io.github.ArneFfm/shared-forest","icons":[{"src":"https://sharedforest.com/icon-512.png","sizes":["512x512"],"mimeType":"image/png"}],"title":"Shared Forest","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://sharedforest.com/mcp","type":"streamable-http"}],"version":"1.5.0","repository":{"url":"https://github.com/ArneFfm/shared-forest-agents","source":"github"},"websiteUrl":"https://sharedforest.com/developers","description":"Plant or sponsor trees in a shared forest that grows from its traffic. Sponsoring uses OAuth."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-04T00:50:35.363658Z","publishedAt":"2026-10-04T00:50:35.363658Z","statusChangedAt":"2026-10-04T00:50:35.363658Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://sharedforest.com/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2026-07-28","2025-06-18","2025-03-26","2024-11-05"],"stateless":true},"health":{"reachable":true,"uptime_30d":0.9904762,"latency_ms_p50":306,"consecutive_failures":0,"last_probe_at":"2026-10-19T22:33:17.307Z","last_ok_at":"2026-10-19T22:33:17.307Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"design_tree","title":"Design a sponsored tree","description":"Turns a short wish (for example 'a silver birch with lanterns') into a premium tree design. An AI paints the tree after the call (about 30 s); the first painting becomes the tree. Returns design_id and the tree genome. Max 3 design attempts per caller per day (including rejected or interrupted generation). Show the result to the user before you order.","annotations":{"readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"explain_shared_forest","title":"Explain Shared Forest","description":"Read-only. Returns the full agent guide as Markdown: growth rules, API, tools and limits.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"find_spots","title":"Find free spots","description":"Read-only. Suggests free positions for N sponsored trees, optionally near a point. Pass the spots to start_sponsorship, or omit spots there and the server picks them.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"get_design","title":"Read a tree design","description":"Read-only. Returns one design by design_id: genome, genomeHash and expiresAt.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"get_forest","title":"Forest summary","description":"Read-only. Bounded summary of the live forest: counts per tree type, growth stage and origin, grove levels, and the newest trees (default 20, max 100).","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"get_forest_stats","title":"Forest statistics","description":"Read-only. Counts of trees, groves, total and unique visitors, and traffic by class (humans, agents, bots, trees planted today).","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"get_order","title":"Read a sponsorship order","description":"Read-only. Needs OAuth scope account:read or sponsor:write. Status of one of the user's orders (open, paid, fulfilled, expired, refunded, disputed, cancelled, refund_pending) and its tree ids once fulfilled. Poll every 10 seconds or more after the user pays.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"get_price_quote","title":"Quote a tree sponsorship","description":"Read-only. Final price for sponsoring N trees for 12 months: unit price, total in euro cents and discount. Call it before you tell the user a price.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"list_trees","title":"List trees","description":"Read-only. One page of trees with cursor pagination, the same data as GET /api/forest?limit=. Pass nextCursor as cursor until it is null.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"my_orders","title":"My sponsorship orders","description":"Read-only. Needs OAuth scope account:read. The signed-in user's sponsorship orders, newest first, with status, total and tree ids.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"my_trees","title":"My sponsored trees","description":"Read-only. Needs OAuth scope account:read. The trees of the signed-in user's fulfilled orders, with a link to each tree in the forest.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"plant_tree","title":"Plant a tree","description":"Plant one tree in the Shared Forest for the caller. One tree per visitor per day; repeats only add growth energy. The visit counts as agent traffic. Ask the user before you call it.","annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"},{"name":"start_sponsorship","title":"Start a tree sponsorship","description":"Needs OAuth scope sponsor:write (a Shared Forest account). Creates an unpaid order for the signed-in user and holds the spots. It charges nothing. The total must fit the spending limit the user set when connecting. The order expires after 30 minutes unless the user confirms. Returns confirm_url: give it to your user. The user logs in, accepts the terms and pays on that page. Ask the user before you call it and confirm name and total.","annotations":{"readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T22:33:17.307Z"}],"dev.protogrid/trust":{"score":97,"components":{"hygiene":100,"liveness":100,"freshness":100,"provenance":90},"drivers":["+repository","+namespace-matches-repo","+website","+reachable","+uptime-99%","+updated-16d-ago"],"flags":[],"blocked":false,"computed_at":"2026-10-19T23:07:06.975Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":95,"label":"strong","components":{"auth":null,"hygiene":100,"protocol":100,"stability":75,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"supports 2026-07-28 (server/discover)","status":"pass","category":"protocol"},{"id":"protocol.stateless","detail":"answers without a session","status":"pass","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"tool list is cacheable (ttlMs 60000)","status":"pass","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"13 of 13 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint","status":"pass","category":"hygiene"},{"id":"tools.token_cost","detail":"about 2,210 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"6 tool changes in 30 days","status":"warn","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["~stability.changes"],"flags":[],"tool_count":13,"token_estimate":2210,"tools_hash":"d2a3d6b19e5708b974738ca3c9c9cbc7","tools_changed_at":"2026-10-11T03:57:51.633Z","computed_at":"2026-10-19T23:18:21.627Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"io.github.ArneFfm/shared-forest","aliases":[],"alias_count":0,"repository_key":"github:arneffm/shared-forest-agents","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/io.github.ArneFfm%2Fshared-forest/tools","arguments":{"name":"io.github.ArneFfm/shared-forest"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/io.github.ArneFfm%2Fshared-forest/connection?target=mcpServers","arguments":{"name":"io.github.ArneFfm/shared-forest","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}