Servidor MCP

Shared Forest

io.github.ArneFfm/shared-forest
Comercio y retail Otros Público y accesible MCP 2026-07-28

Qué hace este MCP

Designs, plants, and sponsors trees in a shared forest, with forest statistics, placement suggestions, price quotes, and sponsorship order management.

design_tree
Design a sponsored tree
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.
Esquema de entrada
{'type': 'object', 'required': ['wish'], 'properties': {'wish': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'What the tree should look like, 1-200 characters. No brands, logos or text.'}}, 'additionalProperties': False}
explain_shared_forest
Explain Shared Forest
Read-only. Returns the full agent guide as Markdown: growth rules, API, tools and limits.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], '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."}}, 'additionalProperties': False}
find_spots
Find free spots
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['quantity'], 'properties': {'near_x': {'type': 'number', 'maximum': 8192, 'minimum': 0, 'description': 'Optional x coordinate (0-8192) to search near. Needs near_y.'}, 'near_y': {'type': 'number', 'maximum': 8192, 'minimum': 0, 'description': 'Optional y coordinate (0-8192) to search near. Needs near_x.'}, 'quantity': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of trees, 1-100. Larger orders get a lower unit price.'}}, 'additionalProperties': False}
get_design
Read a tree design
Read-only. Returns one design by design_id: genome, genomeHash and expiresAt.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['design_id'], 'properties': {'design_id': {'type': 'string', 'pattern': '^dsn_[A-Za-z0-9_-]{4,64}$', 'description': 'Design id from design_tree, for example dsn_abc123.'}}, 'additionalProperties': False}
get_forest
Forest summary
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).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'bbox': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 4, 'minItems': 4, 'description': 'Bounding box [minX, minY, maxX, maxY] in world coordinates. Only trees inside it are returned.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Number of newest trees to return.'}}, 'additionalProperties': False}
get_forest_stats
Forest statistics
Read-only. Counts of trees, groves, total and unique visitors, and traffic by class (humans, agents, bots, trees planted today).
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'fields': {'type': 'array', 'items': {'enum': ['trees', 'groves', 'visitors', 'uniqueVisitors', 'humans', 'agents', 'bots', 'plantedToday'], 'type': 'string'}, 'description': 'Return only these counters. Omit for all counters.', 'uniqueItems': True}}, 'additionalProperties': False}
get_order
Read a sponsorship order
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['order_id'], 'properties': {'order_id': {'type': 'string', 'pattern': '^ord_[A-Za-z0-9_-]{4,64}$', 'description': 'Order id from start_sponsorship, for example ord_abc123.'}}, 'additionalProperties': False}
get_price_quote
Quote a tree sponsorship
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['quantity'], 'properties': {'quantity': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of trees, 1-100. Larger orders get a lower unit price.'}}, 'additionalProperties': False}
list_trees
List trees
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': ['limit'], 'properties': {'bbox': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 4, 'minItems': 4, 'description': 'Bounding box [minX, minY, maxX, maxY] in world coordinates. Only trees inside it are returned.'}, 'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Trees per page, for example 100.'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor from nextCursor of the previous page.'}}, 'additionalProperties': False}
my_orders
My sponsorship orders
Read-only. Needs OAuth scope account:read. The signed-in user's sponsorship orders, newest first, with status, total and tree ids.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 50, 'minimum': 1, 'description': 'Number of orders, 1-50.'}}, 'additionalProperties': False}
my_trees
My sponsored trees
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'limit': {'type': 'integer', 'default': 100, 'maximum': 500, 'minimum': 1, 'description': 'Number of trees, 1-500.'}}, 'additionalProperties': False}
plant_tree
Plant a tree
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.
Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, '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.'}}, 'additionalProperties': False}
start_sponsorship
Start a tree sponsorship
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.
Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['quantity', 'design_ids', 'display_name', 'idempotency_key'], 'properties': {'link': {'type': 'string', 'format': 'uri', 'pattern': '^https://', 'maxLength': 2048, 'description': 'Optional https link. It goes live after manual review.'}, 'email': {'type': 'string', 'format': 'email', 'maxLength': 254, 'description': 'Optional email for the confirmation and the invoice. Default: the email of the signed-in account.'}, 'spots': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number', 'maximum': 8192, 'minimum': 0}, 'y': {'type': 'number', 'maximum': 8192, 'minimum': 0}}, 'additionalProperties': False}, 'maxItems': 100, 'minItems': 1, 'description': 'Optional positions from find_spots, one per tree. Omit and the server picks free spots.'}, 'quantity': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Number of trees, 1-100. Larger orders get a lower unit price.'}, 'link_text': {'type': 'string', 'maxLength': 50, 'description': 'Optional public label for the link. Requires link; approved with it.'}, 'design_ids': {'type': 'array', 'items': {'type': 'string', 'pattern': '^dsn_[A-Za-z0-9_-]{4,64}$', 'description': 'Design id.'}, 'maxItems': 100, 'minItems': 1, 'description': 'One design_id for all trees, or one per tree.'}, 'display_name': {'type': 'string', 'maxLength': 32, 'minLength': 1, 'description': 'Name shown on the trees, 1-32 characters, labelled Sponsored.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Retry key, for example a UUID. A retry with the same key returns the same order.'}, 'short_description': {'type': 'string', 'maxLength': 160, 'description': 'Optional short public description. Requires link; approved with it.'}}, 'additionalProperties': False}
Modificado
start_sponsorship
27 de September de 2026 a las 02:40
Modificado
get_price_quote
27 de September de 2026 a las 02:40
Añadido
my_trees
25 de September de 2026 a las 02:40
Añadido
my_orders
25 de September de 2026 a las 02:40
Añadido
get_order
25 de September de 2026 a las 02:40
Añadido
start_sponsorship
25 de September de 2026 a las 02:40
Añadido
find_spots
25 de September de 2026 a las 02:40
Añadido
get_design
25 de September de 2026 a las 02:40
Añadido
design_tree
25 de September de 2026 a las 02:40
Añadido
get_price_quote
25 de September de 2026 a las 02:40
Añadido
explain_shared_forest
25 de September de 2026 a las 02:40
Añadido
plant_tree
25 de September de 2026 a las 02:40
Añadido
list_trees
25 de September de 2026 a las 02:40
Añadido
get_forest
25 de September de 2026 a las 02:40
Añadido
get_forest_stats
25 de September de 2026 a las 02:40