Shared Forest

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

사용해야 할까요

품질 및 안전성

A
설명 품질
98%
스키마 완전성
95%
이름 품질
92%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,328토큰 (도구 정의)
~1.2 KB일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.82%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "shared-forest": {
      "url": "https://sharedforest.com/mcp"
    }
  }
}

원격 엔드포인트

https://sharedforest.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (13)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢get_forest_stats(fields)

Read-only. Counts of trees, groves, total and unique visitors, and traffic by class (humans, agents, bots, trees planted today).

입력 스키마

{
  "type": "object",
  "properties": {
    "fields": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "trees",
          "groves",
          "visitors",
          "uniqueVisitors",
          "humans",
          "agents",
          "bots",
          "plantedToday"
        ]
      },
      "uniqueItems": true,
      "description": "Return only these counters. Omit for all counters."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_forest(limit, bbox)

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).

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Number of newest trees to return."
    },
    "bbox": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "minItems": 4,
      "maxItems": 4,
      "description": "Bounding box [minX, minY, maxX, maxY] in world coordinates. Only trees inside it are returned."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢list_trees(limit, cursor, bbox)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "description": "Trees per page, for example 100."
    },
    "cursor": {
      "type": "string",
      "description": "Opaque cursor from nextCursor of the previous page."
    },
    "bbox": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "minItems": 4,
      "maxItems": 4,
      "description": "Bounding box [minX, minY, maxX, maxY] in world coordinates. Only trees inside it are returned."
    }
  },
  "required": [
    "limit"
  ],
  "additionalProperties": false
}
🟡plant_tree(idempotency_key)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Optional retry key, for example a UUID. A retry with the same key within 24 hours returns the first visitId and plants nothing new."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢explain_shared_forest(section)

Read-only. Returns the full agent guide as Markdown: growth rules, API, tools and limits.

입력 스키마

{
  "type": "object",
  "properties": {
    "section": {
      "type": "string",
      "description": "Return only the section whose heading contains this text, for example 'Limits' or 'MCP tools'. Omit for the whole guide."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢get_price_quote(quantity)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Number of trees, 1-100. Larger orders get a lower unit price."
    }
  },
  "required": [
    "quantity"
  ],
  "additionalProperties": false
}
🟢design_tree(wish)

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 designs per caller per day. Show the result to the user before you order.

입력 스키마

{
  "type": "object",
  "properties": {
    "wish": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "What the tree should look like, 1-200 characters. No brands, logos or text."
    }
  },
  "required": [
    "wish"
  ],
  "additionalProperties": false
}
🟢get_design(design_id)

Read-only. Returns one design by design_id: genome, genomeHash and expiresAt.

입력 스키마

{
  "type": "object",
  "properties": {
    "design_id": {
      "type": "string",
      "pattern": "^dsn_[A-Za-z0-9_-]{4,64}$",
      "description": "Design id from design_tree, for example dsn_abc123."
    }
  },
  "required": [
    "design_id"
  ],
  "additionalProperties": false
}
🟢find_spots(quantity, near_x, near_y)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Number of trees, 1-100. Larger orders get a lower unit price."
    },
    "near_x": {
      "type": "number",
      "minimum": 0,
      "maximum": 8192,
      "description": "Optional x coordinate (0-8192) to search near. Needs near_y."
    },
    "near_y": {
      "type": "number",
      "minimum": 0,
      "maximum": 8192,
      "description": "Optional y coordinate (0-8192) to search near. Needs near_x."
    }
  },
  "required": [
    "quantity"
  ],
  "additionalProperties": false
}
🟡start_sponsorship(quantity, design_ids, spots, display_name, link, ...)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "quantity": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "description": "Number of trees, 1-100. Larger orders get a lower unit price."
    },
    "design_ids": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^dsn_[A-Za-z0-9_-]{4,64}$",
        "description": "Design id."
      },
      "minItems": 1,
      "maxItems": 100,
      "description": "One design_id for all trees, or one per tree."
    },
    "spots": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "x": {
            "type": "number",
            "minimum": 0,
            "maximum": 8192
          },
          "y": {
            "type": "number",
            "minimum": 0,
            "maximum": 8192
          }
        },
        "required": [
          "x",
          "y"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 100,
      "description": "Optional positions from find_spots, one per tree. Omit and the server picks free spots."
    },
    "display_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Name shown on the trees, 1-32 characters, labelled Sponsored."
    },
    "link": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://",
      "maxLength": 2048,
      "description": "Optional https link. It goes live after manual review."
    },
    "link_text": {
      "type": "string",
      "maxLength": 50,
      "description": "Optional public label for the link. Requires link; approved with it."
    },
    "short_description": {
      "type": "string",
      "maxLength": 160,
      "description": "Optional short public description. Requires link; approved with it."
    },
    "email": {
      "type": "string",
      "format": "email",
      "maxLength": 254,
      "description": "Optional email for the confirmation and the invoice. Default: the email of the signed-in account."
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Retry key, for example a UUID. A retry with the same key returns the same order."
    }
  },
  "required": [
    "quantity",
    "design_ids",
    "display_name",
    "idempotency_key"
  ],
  "additionalProperties": false
}
🟢get_order(order_id)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "pattern": "^ord_[A-Za-z0-9_-]{4,64}$",
      "description": "Order id from start_sponsorship, for example ord_abc123."
    }
  },
  "required": [
    "order_id"
  ],
  "additionalProperties": false
}
🟢my_orders(limit)

Read-only. Needs OAuth scope account:read. The signed-in user's sponsorship orders, newest first, with status, total and tree ids.

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20,
      "description": "Number of orders, 1-50."
    }
  },
  "required": [],
  "additionalProperties": false
}
🟢my_trees(limit)

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.

입력 스키마

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500,
      "default": 100,
      "description": "Number of trees, 1-500."
    }
  },
  "required": [],
  "additionalProperties": false
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 13개
검증됨버전이 기록되지 않음도구 13개