Skip to content

Shared Forest

by ArneFfm · remote · no sign-in to list tools · v1.5.0 · published by GitHub user ArneFfm

Plant or sponsor trees in a shared forest that grows from its traffic. Sponsoring uses OAuth.

Changes · 3

13 tools: 3 change things and 10 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http shared-forest https://sharedforest.com/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "plant_tree" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "plant_tree" says "tree": a word for reading.

    What this check looks for
  • The server marks "design_tree" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "design_tree" says "tree": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Changes things 3Claude Code: ask
  • design_treeTurns a short wish (for example 'a silver birch with lanterns') into a premium tree design.1 finding

    Why it is in this group

    • The name "design_tree" says "tree": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "design_tree" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "design_tree" says "tree": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
  • plant_treePlant one tree in the Shared Forest for the caller.1 finding

    Why it is in this group

    • The name "plant_tree" says "tree": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "plant_tree" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "plant_tree" says "tree": a word for reading.

      What this check looks for
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • start_sponsorshipNeeds OAuth scope sponsor:write (a Shared Forest account).No findings

    Why it is in this group

    • The name "start_sponsorship" says "start": a word for a change.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 10Claude Code: allow
  • explain_shared_forestRead-only.No findings

    Why it is in this group

    • The name "explain_shared_forest" says "explain": a word for reading.
    Description, as the server wrote it
    Read-only. Returns the full agent guide as Markdown: growth rules, API, tools and limits.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • find_spotsRead-only.No findings

    Why it is in this group

    • The name "find_spots" says "find": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_designRead-only.No findings

    Why it is in this group

    • The name "get_design" says "get": a word for reading.
    Description, as the server wrote it
    Read-only. Returns one design by design_id: genome, genomeHash and expiresAt.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_forestRead-only.No findings

    Why it is in this group

    • The name "get_forest" says "get": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_forest_statsRead-only.No findings

    Why it is in this group

    • The name "get_forest_stats" says "get": a word for reading.
    Description, as the server wrote it
    Read-only. Counts of trees, groves, total and unique visitors, and traffic by class (humans, agents, bots, trees planted today).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_orderRead-only.No findings

    Why it is in this group

    • The name "get_order" says "get": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • get_price_quoteRead-only.No findings

    Why it is in this group

    • The name "get_price_quote" says "get": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • list_treesRead-only.No findings

    Why it is in this group

    • The name "list_trees" says "list": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • my_ordersRead-only.No findings

    Why it is in this group

    • The description's first verb is "read": a word for reading.
    Description, as the server wrote it
    Read-only. Needs OAuth scope account:read. The signed-in user's sponsorship orders, newest first, with status, total and tree ids.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
  • my_treesRead-only.No findings

    Why it is in this group

    • The name "my_trees" says "tree": a word for reading.
    Description, as the server wrote it
    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 the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.5.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http shared-forest https://sharedforest.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__shared-forest__get_forest_stats",
      "mcp__shared-forest__get_forest",
      "mcp__shared-forest__list_trees",
      "mcp__shared-forest__explain_shared_forest",
      "mcp__shared-forest__get_price_quote",
      "mcp__shared-forest__get_design",
      "mcp__shared-forest__find_spots",
      "mcp__shared-forest__get_order",
      "mcp__shared-forest__my_orders",
      "mcp__shared-forest__my_trees"
    ],
    "ask": [
      "mcp__shared-forest__plant_tree",
      "mcp__shared-forest__design_tree",
      "mcp__shared-forest__start_sponsorship"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as shared-forest. Review it before you use it.