Pedra MCP Server
OfficialPedra MCP Server lets an MCP client run Pedra's AI real-estate photo and video editing (and manage properties/credits) as single blocking tool calls.
Summary: One tool per Pedra API endpoint — pass an image (public URL, data: URI, or local file path) and get back the finished asset URL, with no job polling.
Photo editing
pedra_enhance— improve lighting, color, sharpness (optionally preserving original framing)pedra_enhance_and_correct_perspective— enhance + straighten walls/linespedra_empty_room— strip furniture/objectspedra_furnish— virtual staging (style, room type, creativity)pedra_renovation— renovate walls/floors/finishes, furnished or emptypedra_edit_via_prompt— natural-language editspedra_sky_blue— swap dull sky for clear bluepedra_remove_object— mask-based object removalpedra_blur— blur faces, license plates, etc.
Video & audio
pedra_create_video— render a property video from images (blocks up to ~10 min, returns final URL); supports music, voiceover, subtitles, branding, transitions, vertical formatpedra_update_video— edit an existing video without re-rendering unchanged clipspedra_generate_voice_script— GPT-4o vision writes a narration script from photospedra_generate_voice— TTS the script into anaudioIdfor videospedra_music_library— list music tracks and voice languages (read-only)
Properties
pedra_list_properties,pedra_list_property_images— find existing photos (read-only)pedra_create_property,pedra_add_images_to_property(by URL)
Account
pedra_credits— plan + remaining credits (read-only)pedra_feedback— thumbs up/down with optional credit-back
Without an API key
pedra_request_access,pedra_check_access— email-based signup/approval flow; once approved, all tools work for the session
Notes
Image inputs accept public
https://URLs,data:URIs, or absolute local file paths (auto-inlined, up to 40 MB)Virtual-tour, upload-link, and local-panorama tools described in the README are not present in this schema
This is a wrapped subset: 22 tools covering editing, video/voice, property management, credits, and feedback — but no virtual tour support here.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pedra MCP ServerHow many Pedra credits do I have left?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pedra MCP Server
Official Model Context Protocol server for the Pedra API — use Pedra's AI real-estate photo editing (virtual staging, renovation, room emptying, enhancement, sky replacement, object removal/blur, property videos, and hosted 360° virtual tours) directly from Claude, ChatGPT, Cursor, and any other MCP client.
It exposes one tool per API endpoint. Each photo and video tool is a single blocking call that returns the final asset URL(s) — there are no job IDs to poll. Virtual tours build in the background: pedra_create_virtual_tour returns a tourId, and pedra_get_virtual_tour is polled until it's ready.
Quick start
The server reads your Pedra API key (Settings in your Pedra account) from the PEDRA_API_KEY environment variable. No account yet? Start it without a key — see No Pedra account yet?.
The server runs over stdio and is published to npm, so most clients just run it with npx — no global install needed.
Claude Desktop (one-click)
Download the latest pedra-mcp.mcpb from Releases and double-click it (or drag it into Claude Desktop → Settings → Extensions). Claude installs the bundled server and prompts for your PEDRA_API_KEY — no JSON editing.
Claude Desktop (manual)
Or add this to your claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"pedra": {
"command": "npx",
"args": ["-y", "@pedra-ai/mcp"],
"env": { "PEDRA_API_KEY": "your-api-key" }
}
}
}Cursor
In ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"pedra": {
"command": "npx",
"args": ["-y", "@pedra-ai/mcp"],
"env": { "PEDRA_API_KEY": "your-api-key" }
}
}
}Any MCP client
Run the binary directly with the key in the environment:
PEDRA_API_KEY=your-api-key npx -y @pedra-ai/mcpOr install it:
npm install -g @pedra-ai/mcp
PEDRA_API_KEY=your-api-key pedra-mcpSmithery
You can also install and configure Pedra automatically via Smithery:
npx -y @smithery/cli install @pedra-ai/mcp --client claude(swap claude for cursor, windsurf, etc.) Smithery prompts for your PEDRA_API_KEY and writes the client config for you.
No Pedra account yet?
Start the server without PEDRA_API_KEY, for example in Claude Code:
claude mcp add pedra -- npx -y @pedra-ai/mcpThen just ask for something ("stage this photo with Pedra"). Without a key the server adds two tools, and the assistant does the rest:
pedra_request_accesswith your email. Pedra emails you a link (valid 30 minutes): a new account chooses a password there, an existing one clicks Allow. Nothing is created until you click, and you can decline.pedra_check_accessuntil you've confirmed. Once approved, every Pedra tool works for the rest of the session. The key is kept in memory only, never written to disk; the tool result shows it along with how to keep it: add it asPEDRA_API_KEYto the server'senv(e.g.claude mcp add pedra -e PEDRA_API_KEY=<key> -- npx -y @pedra-ai/mcp, or paste it into the extension's settings in Claude Desktop).
Until then, the other tools answer "No API key yet: call pedra_request_access with the user's email". Inbox confirmation is required, disposable email domains are refused, and requests are rate-limited. New accounts start with Pedra's free trial credits.
(In ChatGPT and claude.ai, use Pedra's hosted connector instead: connecting it runs a sign-in where new users can create an account.)
Related MCP server: Rendobar MCP Server
Tools
Tool | Endpoint | What it does |
|
| Improve lighting, color, sharpness |
|
| Enhance + straighten perspective |
|
| Remove all furniture/objects |
|
| Virtually stage a room |
|
| Renovate walls/floors/finishes |
|
| Edit from a natural-language prompt |
|
| Replace a dull sky with clear blue |
|
| Remove an object using a mask |
|
| Blur faces, license plates, etc. |
|
| Render a property video from images |
|
| Edit a video without re-rendering unchanged clips |
|
| Write a voiceover script from property photos |
|
| Turn a script into a voiceover audio track |
|
| List background-music tracks, voice languages + narration voices |
|
| List the account's properties |
|
| List a property's photos (or, with |
|
| Create a property |
|
| Add photos (or, with |
|
| Local only: upload 360° photo files from this computer into a property |
|
| No-login page to upload photos or 360° photos from a phone or computer ( |
|
| Build a hosted 360° virtual tour (AI names and links the rooms) |
|
| Tour status, share link, embed code, scenes, links |
|
| List the account's virtual tours |
|
| Rename, reorder, remove rooms, re-link, restyle (free) |
|
| Add rooms to the end of a tour |
|
| Read plan + remaining credits |
|
| Thumbs up/down + optional credit-back |
|
| Only without an API key: email the user a link to create/allow their account |
|
| Only without an API key: check the request; once approved, every tool works for the session |
Most image tools take an imageUrl plus a few optional parameters; see each tool's input schema in your MCP client. The imageUrl (and maskUrl, and each create_video frame) accepts any of:
a public
https://URL,a
data:URI, oran absolute path to a local image file — the server reads it off disk and inlines it as base64 for you, so you can point a tool at a file you just dragged in without hosting it first (
.jpg,.jpeg,.png,.webp,.gif,.bmp,.tif/.tiff,.heic/.heif,.avif; up to 40 MB).
Note: an image pasted into the chat is not a file path, so it can't be forwarded to the tool — drag in a file, or save the paste and pass its path. Photos on the user's phone go through
pedra_create_upload_link: they upload on a no-login page (up to 100 files, 24 h), thenpedra_list_property_imagesreturns their URLs for editing,pedra_create_videoorpedra_create_virtual_tour.
Uploads are limited per day: 30 images on the free plan, 500 on paid plans (reset at midnight UTC), counting every image stored from outside the app (pedra_add_images_to_property, pedra_add_local_panoramas, URL scenes in tours, upload-link files); over it the call fails with HTTP 429, upload_limit and nothing is stored. Upload links: 5 a day free, 50 paid (upload_link_limit).
Example prompts once connected:
"Use Pedra to virtually stage https://example.com/empty-living-room.jpg as a minimalist living room."
"Virtually stage /Users/me/Desktop/empty-living-room.jpg as a minimalist living room."
"How many Pedra credits do I have left?"
Virtual tours
POST your 360° photos, get back a hosted, linked, shareable virtual tour: AI names the rooms and places the door-to-door navigation points. The tour tools have the same names, descriptions and input schemas as Pedra's hosted MCP server (https://app.pedra.ai/mcp), so an agent behaves the same on either.
A typical flow:
Get the 360° photos into a property.
Files on this computer →
pedra_add_local_panoramaswith the paths in walking order. This tool exists only in this local server: it reads the files off disk and sends them base64-encoded, 10 per call under the API's 50 MB request limit. Files over ~33 MB can't go this way.Photos on someone's phone (or big files) →
pedra_create_upload_linkwithtype: "360", and hand over theuploadUrl(no login, valid 24 h).Photos already online → skip this step and pass the URLs as
scenes.
Build it:
pedra_create_virtual_tourwith thepropertyId(uses every 360° photo in upload order) or withscenes. It returns atourIdstraight away.Wait: poll
pedra_get_virtual_touruntilstatusis"ready"(about 10 s per room) — then sharetourUrlor embedembedCode. A"failed"build says why and costs nothing.Adjust with
pedra_update_virtual_tour(free, instant) or append rooms withpedra_add_virtual_tour_scenes.
Linking costs max(3, ceil(rooms/3)) credits for "sequential" (default; each room to the next), 5–160 for "smart" (AI works out which rooms connect), and nothing for "none". Deleting a tour is API-only (not exposed as a tool).
"Make a Pedra virtual tour of Calle Mayor 12 from /Users/me/360/entrance.jpg, /Users/me/360/living.jpg and /Users/me/360/kitchen.jpg, in that order, and give me the link."
How it works
This server is a thin wrapper over @pedra-ai/sdk, which encodes the API's contract details:
Synchronous by design (except virtual tours). Every photo and video endpoint blocks and returns the final URL(s) in the response body. Even
pedra_create_videopolls server-side and returns the finishedvideoUrlinline (it can take up to ~10 minutes; the API keeps the connection alive with a heartbeat).Errors are tool errors. The API's 4xx responses (insufficient credits, bad image, …) come back as MCP tool errors with a readable message, not crashes.
Privacy Policy
This server sends the image/video URLs and parameters you pass to the Pedra API to perform the requested edit, authenticated with your PEDRA_API_KEY. Without a key, pedra_request_access sends the email address you give it to Pedra so Pedra can email you a confirmation link; a key obtained that way is held in memory for the session only. It stores no data itself. Data collection, usage, storage, retention, third-party sharing, and contact information are covered by Pedra's privacy policy: https://pedra.ai/privacy.
License
MIT © Pedra
Available Tools
27 toolspedra_add_images_to_propertyAdd photos to propertyA
Add photos to a property by URL (the server fetches each one, so any public https image URL or small data: URI works). Returns the stored img.pedra.ai URLs to use with the editing, video and tour tools. For photos on the user's device, use pedra_create_upload_link instead. Pass type "360" for 360° photos (checked to be 2:1 equirectangular), which can then become a virtual tour. (With this local server, 360° photo files on this computer can go through pedra_add_local_panoramas instead.)
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | What the images are: regular photos ("photo", the default) or 360° photos ("360"). | |
| imageUrls | Yes | Image URLs to fetch and add to the property: up to 20 photos, or up to 10 when type is "360". | |
| propertyId | Yes | Target property id (from pedra_list_properties or pedra_create_property). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=true; the description goes beyond them by disclosing that the server performs the fetch (so https public URLs or small data: URIs are required) and that 360° images are validated as 2:1 equirectangular. It stops short of covering failure behavior or whether re-adding duplicates images, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the primary action and the returned artifact before the alternatives. The nested parenthetical about local 360° files is slightly awkward but carries non-redundant routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description states what is returned (stored img.pedra.ai URLs) and how they are used downstream. Combined with the sibling routing and 360° validation notes, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the acceptable URL forms and the network-fetch implication, plus the semantic consequence of passing type "360" (equirectangular check and tour eligibility).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (photos to a property) and explicitly scopes the input mechanism to URLs fetched by the server. It distinguishes itself from the sibling tools pedra_create_upload_link and pedra_add_local_panoramas by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use pedra_create_upload_link for device photos, pedra_add_local_panoramas for local 360° files. It also names the downstream consumers (editing, video, tour tools) that the returned URLs feed, which tells the agent when this call is a prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_add_local_panoramasAdd local 360° photos to propertyA
LOCAL-ONLY TOOL (this Pedra MCP server runs on the user's own computer, so it can read files from its disk). Upload 360° photo files (2:1 equirectangular JPEG, PNG or WebP) from absolute local paths into a property, in the order given — that order becomes the walking order when you then call pedra_create_virtual_tour with just the propertyId. Files are sent in batches (10 per call, under the 50 MB request limit); a file over ~33 MB can't be sent this way — use pedra_create_upload_link for those. Prefer this over pedra_create_upload_link whenever the 360° photos are files on this computer. Returns the added photos (imageIds are scene ids) and any that failed, each with its path.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | Absolute paths to 360° photo files on this computer, in walking order (file:// URLs and ~ are accepted). | |
| propertyId | Yes | Target property id (from pedra_list_properties or pedra_create_property). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds valuable operational context — local-disk-only access, 10-file batching under the 50 MB request limit, the ~33 MB per-file cap, and the order-becomes-walking-order effect — but does not describe auth requirements or failure handling in depth. Strong added context against an already-covered safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the critical LOCAL-ONLY framing and is dense with useful detail, but it is delivered as a single long paragraph. Every sentence earns its place, though the batching and size-limit clauses could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in by describing the return value (added photos with imageIds as scene ids, plus failed files each with their path). Combined with limits, batching and the sibling cross-reference, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented structurally, giving a baseline of 3. The description goes beyond that by explaining that the supplied order becomes the walking order used by pedra_create_virtual_tour and by specifying accepted image formats (2:1 equirectangular JPEG/PNG/WebP), adding meaning the schema alone doesn't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (upload/add) and resource (360° photo files from local disk into a property), and explicitly distinguishes itself from the sibling pedra_create_upload_link. An agent can tell immediately what this does and how it differs from the alternative path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection criteria: prefer this over pedra_create_upload_link whenever the photos are files on this computer, and use the upload link instead for files over ~33 MB. Both the when and the when-not are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_add_virtual_tour_scenesAdd rooms to virtual tourA
Add rooms to the end of an existing virtual tour. With "sequential" linking (default) only the new stretch is linked: the last existing room to the first new one, then each new room to the next. That costs max(3, ceil(new rooms/3)) credits; "none" is free. The tour stays live while this runs; poll pedra_get_virtual_tour until status is "ready".
| Name | Required | Description | Default |
|---|---|---|---|
| scenes | Yes | The new rooms, in walking order. | |
| tourId | Yes | The tour to extend. | |
| linking | No | Defaults to "sequential". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds substantial behavioral detail beyond them: credit cost formula for sequential linking, free option for linking none, async behavior, and the need to poll until status ready. This is exactly the kind of operational context an agent needs for a mutating, credit-consuming, asynchronous tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then efficiently packs linking behavior, cost implications, and required polling into three sentences. Every sentence earns its place with no redundant restatement of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with annotations covering safety hints, no output schema, and full parameter schema coverage, the description supplies the critical missing operational context: async execution, cost model, and polling instructions. An agent has enough information to call this correctly without opening other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3. The description adds meaning beyond the schema by explaining the effect of the linking parameter, including the difference between sequential and none and the resulting credit cost. It also clarifies that new rooms are appended and linked in walking order, which reinforces the scenes parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: add rooms to the end of an existing virtual tour. This clearly distinguishes it from sibling tools like pedra_create_virtual_tour and pedra_update_virtual_tour, which create or modify tour metadata rather than append scenes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence establishes clear context for when this tool applies: extending an existing tour. It also instructs the agent to poll pedra_get_virtual_tour until status is ready after invocation. However, it does not explicitly state exclusions or contrast with alternative sibling tools beyond the polling helper.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_blurBlur objectsA
Blur objects in an image (e.g. faces, license plates) for privacy. Returns the blurred image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| objectsToBlur | Yes | Labels/regions to blur, e.g. ["faces", "license plates"]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds the return value (blurred image URL), which is genuinely useful, but says nothing about credit cost, whether the source is modified, or whether this is asynchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, purpose front-loaded before the return-value note. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with full schema coverage and no output schema, the description supplies the one thing the schema omits (the returned blurred image URL). Minor gaps like cost or sync/async behavior remain but are not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are fully documented in the schema, including the fallback to pedra_create_upload_link for unreachable device photos. The description adds no parameter detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (blur objects in an image) with concrete examples of the targets (faces, license plates) and the intent (privacy). It is distinguishable from siblings like pedra_remove_object or pedra_enhance, though it never names an alternative to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for privacy' implies the use case, but there is no explicit when-to-use vs. when-to-use-something-else guidance and no mention of the sibling tools an agent might confuse this with (e.g. pedra_remove_object).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_create_propertyCreate propertyA
Create a new Pedra property. Returns its propertyId and an appUrl. To add photos that are on the user's device, pedra_create_upload_link is simpler (no login); or give the user the appUrl to open the property in Pedra and drop their photos in, then use pedra_list_property_images.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Property name, e.g. the listing address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, open-world, non-destructive operation. The description adds context annotations cannot convey: the returned propertyId and appUrl, and the implicit auth distinction (upload link works 'no login'). Permissions for creation itself are not spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and return values, then the optional workflow guidance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming the return values (propertyId, appUrl). It also closes the loop on the natural next step (photos via upload link or appUrl), so an agent has everything needed to call it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (name) and schema description coverage is 100%, so the schema already explains it as the listing address. The description adds no syntax, format, or default guidance for name, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new Pedra property') and immediately names the return values. It also references the sibling tools (pedra_create_upload_link, pedra_list_property_images) that handle the adjacent photo workflow, so an agent can place it in the tool set without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing advice for the follow-on photo step: use pedra_create_upload_link for device photos (noting it needs no login), or hand the user the appUrl and then call pedra_list_property_images. It does not say when creating a property is appropriate relative to e.g. pedra_list_properties, but the alternatives it does name are actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_create_upload_linkCreate photo upload linkA
Get a link where the user (or their photographer) uploads photos from their phone or computer into a property. No login, valid 24 hours. Use this whenever the photos are files on the user's device that weren't attached to the chat: for editing, videos or virtual tours. Regular photos and 360° photos both work (360° photos are recognised automatically); pass type "360" for a virtual tour so anything else is refused. Creates the property if no propertyId is given. Give the user the uploadUrl, wait until they say they're done, then use pedra_list_property_images (type "360" for 360° photos), or pedra_create_virtual_tour with the propertyId. (With this local server, files on this computer can also be passed directly: a local path as imageUrl, or pedra_add_local_panoramas for 360° photos.)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name for the new property, e.g. the listing address. Ignored when propertyId is given. | |
| type | No | "any" (default) takes photos and 360° photos; "360" only takes 360° photos. | |
| language | No | Language of the tour page and of AI room names. Defaults to "en". | |
| propertyId | No | Property to upload into (from pedra_list_properties). Omit to create a new one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only=false/openWorld=false/destructive=false; the description adds substantial context beyond them: no login required, 24-hour expiry, that a property is created when propertyId is omitted, that type '360' causes non-360 uploads to be refused, and that 360° photos are auto-recognised.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and validity constraint, then routing and follow-up steps. Dense with useful information, though the trailing parenthetical about the local server is somewhat long and could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, access model, expiry, side effects, parameter behaviour, the downstream workflow, and the local-server alternative. With no output schema and full schema coverage, nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: propertyId omission triggers property creation, and type '360' enforces refusal of other content. It slightly restates the schema's own type/name descriptions, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a link where the user... uploads photos... into a property') with clear scope: no login, 24-hour validity. It is readily distinguishable from siblings like pedra_add_images_to_property and pedra_add_local_panoramas, which are named in the routing text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: 'whenever the photos are files on the user's device that weren't attached to the chat.' It also names the alternative path for local files (passing a local imageUrl or using pedra_add_local_panoramas), and states the follow-up sequence (wait, then pedra_list_property_images or pedra_create_virtual_tour).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_create_videoCreate property videoB
Create a property video from a list of images. Blocks server-side until the video is rendered (up to ~10 min) and returns the finished video URL inline.
| Name | Required | Description | Default |
|---|---|---|---|
| music | No | ||
| voice | No | ||
| images | Yes | Ordered list of images that make up the video. | |
| branding | No | ||
| isVertical | No | Force a vertical (9:16) video. | |
| endingTitle | No | ||
| endingSubtitle | No | ||
| propertyCharacteristics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, open-world, non-destructive write, and the description adds genuine behavioral context beyond them: the call blocks server-side for up to ~10 minutes and returns the rendered URL inline rather than requiring a polling step. That latency and return-shape disclosure is exactly what an agent needs to avoid a timeout surprise. It stops short of 5 because no auth, quota, or failure behavior is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, fully front-loaded: the action first, then the operational caveat. Nothing is padded and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a heavy composite tool with 8 parameters, nested objects, and no output schema, the description covers the crucial return value and blocking behavior well. But it leaves the multi-input composition story (music library, voiceover dependency, branding, aspect ratio) entirely to a low-coverage schema, so the definition is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% across 8 parameters, so the description carries a heavier burden — yet it only restates 'a list of images' and says nothing about music, voice, branding, ending titles, or property characteristics. Nested structures like music.track and voice.audioId carry their own schema text, but the top-level composition options are undocumented in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a property video from a list of images.' It is immediately clear what the tool produces and its input source. It does not, however, differentiate itself from the sibling pedra_update_video, which an agent would need to distinguish creation from modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and names no alternatives, even though the sibling list contains pedra_update_video, pedra_generate_voice, and pedra_music_library which are all relevant to composing a video. The only routing hint ('get a link from pedra_create_upload_link') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_create_virtual_tourCreate virtual tourA
Build a hosted 360° virtual tour: the rooms are named and linked with navigation points by AI, and you get a shareable link and embed code. Pass the 360° photos as scenes (URLs, or imageIds of 360° photos already in the property) in the order someone would walk through the home, or just a propertyId to use all its 360° photos. Linking: "sequential" (default) links each room to the next and costs max(3, ceil(rooms/3)) credits; "smart" lets AI work out which rooms connect (slower, 5-160 credits by room count); "none" is free. Returns a tourId immediately — the build takes about 10 seconds per room, so poll pedra_get_virtual_tour until status is "ready". One tour per property.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Tour title, e.g. the listing address. | |
| scenes | No | The rooms in walking order. Omit to use every 360° photo in propertyId. | |
| linking | No | How rooms get connected. Defaults to "sequential". | |
| language | No | Language of the tour page and of AI room names. Defaults to "en". | |
| propertyId | No | Property the tour belongs to. Omit to create a new property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, openWorld=true, destructive=false) by disclosing that a tourId returns immediately, that the build takes ~10s/room, that the caller must poll pedra_get_virtual_tour until status is 'ready', and the exact credit formula per linking mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded with the outcome, then inputs, then linking costs, then async behavior. Slightly long for a single paragraph, but nearly every clause carries unique operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the immediate return value (tourId), the polling requirement, and the terminal status — everything an agent needs to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real semantic value: what 'sequential'/'smart'/'none' actually do, their relative cost, and the walking-order meaning of the scenes array.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Build a hosted 360° virtual tour') plus the concrete outputs (shareable link and embed code), clearly distinguishing it from siblings like pedra_add_virtual_tour_scenes or pedra_update_virtual_tour.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly covers the two mutually exclusive input paths (pass scenes in walking order, or just propertyId to use all 360° photos), names the alternative linking modes with their tradeoffs, and states the 'one tour per property' constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_creditsGet creditsARead-only
Read the account's plan and remaining credits. Never deducts credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it reads 'plan and remaining credits', providing specific data beyond annotations. This is useful context for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the core purpose and behavioral guarantee. Every word is informative; no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool without output schema, the description sufficiently explains what is returned (plan and remaining credits). It fully covers the agent's needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4 per rule. The description correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'Get credits' and description clearly specify the verb 'Read' and the resource 'account's plan and remaining credits'. It unambiguously distinguishes from sibling tools that perform image editing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it never deducts credits, implying safe usage. While no alternatives are mentioned, the zero-parameter interface makes usage straightforward and self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_edit_via_promptEdit via promptB
Edit an image from a natural-language instruction (e.g. "paint the walls sage green"). Returns the edited image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Natural-language description of the edit to apply. | |
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, open-world, non-destructive operation, so the safety profile is covered. The description adds one genuinely useful behavioral fact that annotations do not convey — that the result is returned as a new edited image URL rather than modifying in place. It says nothing about cost/credits, latency, or whether the source image is preserved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the core purpose is front-loaded with the example and return value following. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with full schema coverage, the description covers what it does and what it returns, which matters since there is no output schema. It is slightly thin on routing among edit siblings and on cost/side-effect behavior, but nothing required to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are fully documented in the schema, including the accepted imageUrl forms and the fallback to pedra_create_upload_link. The description only echoes the prompt concept via its example and adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('edit an image') plus the mechanism ('from a natural-language instruction') and gives a concrete example. It does not, however, distinguish itself from the many specialized edit siblings such as pedra_remove_object, pedra_furnish, or pedra_enhance, so the agent cannot tell from the description alone when this generic prompt-edit is the right choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage signal is the example instruction ('paint the walls sage green'), which implies an open-ended edit. There is no guidance on when to prefer this over the many narrower edit tools in the sibling list, and no exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_empty_roomEmpty roomA
Remove all furniture and objects from a room, leaving an empty space. Returns the emptied image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is already covered. The description adds the return value (emptied image URL), which is useful given there is no output schema, but says nothing about cost (pedra_credits exists), whether the source image is preserved, or processing behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the return value. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a fully documented schema, the description covers the action and the return shape adequately. The only gap is usage context relative to siblings, which is minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents the accepted input forms (https URL, data URI, local path) plus a fallback to pedra_create_upload_link. The description adds no parameter meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: remove all furniture and objects from a room, producing an empty space. It is distinguishable from the sibling pedra_remove_object (single object removal) by the word 'all', though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the description; there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as pedra_remove_object or pedra_furnish. An agent can infer the scenario but must reason about sibling selection itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_enhanceEnhance imageB
Enhance a real-estate photo: improve lighting, color, and sharpness. Returns the enhanced image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| preserveOriginalFraming | No | Preserve the original framing/aspect ratio/resolution exactly (for verification verticals where the output must legally represent the captured photo). Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the mutation/safety profile is covered. The description adds the return contract ('Returns the enhanced image URL'), which is genuinely useful since there is no output schema, but says nothing about processing time, async behavior, or credit consumption.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the core action and the return value front-loaded. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, stating the effect and the returned URL covers the essentials an agent needs to invoke it. The only real gap is sibling routing, which is a usage-guideline concern rather than a structural omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both imageUrl and preserveOriginalFraming, including the cross-reference to pedra_create_upload_link. The description adds no parameter detail beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (enhance) and resource (real-estate photo) and enumerates the concrete effects: lighting, color, sharpness. It is clear, but it does not differentiate itself from the near-identical sibling pedra_enhance_and_correct_perspective, leaving the agent to guess which enhancement to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. With siblings like pedra_enhance_and_correct_perspective, pedra_edit_via_prompt, pedra_renovation and pedra_furnish all plausible for a given photo, the description never says which condition selects this tool over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_enhance_and_correct_perspectiveEnhance + correct perspectiveB
Enhance a photo and correct vertical/horizontal perspective (straighten walls and lines). Returns the corrected image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| preserveOriginalFraming | No | Preserve the original framing/aspect ratio/resolution exactly (for verification verticals where the output must legally represent the captured photo). Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive (destructiveHint=false) and openWorld. The description adds that it returns the corrected image URL, which is genuinely useful given no output schema exists. It does not clarify whether the original is left untouched or whether the operation consumes credits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: the action with its clarifying parenthetical, then the return value. Zero waste and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the action and the return type, and annotations cover safety. It is nearly complete, missing only the sibling-differentiation and any credit/permission implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (imageUrl, preserveOriginalFraming) are fully documented in the schema, including the upload-link fallback. The description adds no parameter detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource: enhance a photo AND correct vertical/horizontal perspective, with the parenthetical clarifying what correction means (straighten walls and lines). This distinguishes it from the sibling pedra_enhance, which presumably only enhances, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. It doesn't say to prefer pedra_enhance when perspective correction isn't needed, nor what input constraints apply. The only routing hint (use pedra_create_upload_link for phone photos) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_feedbackSubmit feedbackA
Submit thumbs up/down feedback on a generated image, with an optional credit-back on a thumbs-down (subject to the API's eligibility rules).
| Name | Required | Description | Default |
|---|---|---|---|
| vote | No | Thumbs up/down. An empty string clears a previous vote. | |
| comment | No | ||
| imageId | No | Explicit image id. One of imageUrl/imageId is required. | |
| imageUrl | No | The generated image URL to vote on (id is parsed from it). | |
| creditBack | No | Request a credit refund (only honored on a thumbs-down). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, so the description must add behavioral context. It mentions credit-back subject to eligibility rules, but does not elaborate on eligibility or other behaviors like clearing votes, which is partially captured in schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, no fluff, and front-loaded with the primary action and key nuance (credit-back on thumbs-down). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 5 parameters, the description does not explain parameter interdependencies (imageUrl/imageId), success/error responses, or the behavior of the empty vote string. No output schema exists, so the description should compensate, but it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, and the description adds minimal value beyond what the schema already provides. It restates that vote is thumbs up/down and that creditBack is optional, but does not clarify the required relationship between imageUrl and imageId or explain the empty string vote clearing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Submit thumbs up/down feedback on a generated image', which is a specific verb and resource. It distinguishes well from sibling tools that focus on image editing operations like blur, create video, enhance, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for providing feedback with optional credit-back, but does not explicitly state when to use this tool vs alternatives, nor does it explain the eligibility rules for credit-back or when to clear a vote.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_furnishFurnish / virtually stageB
Virtually stage (furnish) a room with AI-generated furniture. Returns the staged image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | e.g. "Minimalist", "Scandinavian", "Modern". | |
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| roomType | No | e.g. "Living room", "Bedroom", "Kitchen". Auto-detected if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the agent already knows this is a non-destructive generative operation. The description adds the key behavioral fact that this is AI generation producing a staged image URL, but discloses nothing about processing time, failure modes, or cost/credits (despite a pedra_credits sibling).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the action stated first and the return value second. No filler, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, non-destructive generation tool with fully documented schema and annotations, the description covers the essential action and return value even without an output schema. It could say more about outputs beyond the URL (e.g., whether multiple variants are returned), but nothing blocking an agent is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents imageUrl, style, and roomType in detail, including the upload-link fallback. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Virtually stage (furnish) a room with AI-generated furniture') and specifies the output ('Returns the staged image URL'). It is clear on its own, but it does not distinguish itself from similarly-named siblings like pedra_empty_room (the inverse) or pedra_renovation, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use, when-not-to-use, or alternative-tool guidance. With ~26 siblings including pedra_empty_room and pedra_create_upload_link, an agent gets no routing help from the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_generate_voiceGenerate voiceover audioA
Render a voiceover from a script via text-to-speech. Returns an audioId — pass it to pedra_create_video / pedra_update_video as voice.audioId to attach the narration (with synced subtitles).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The script to narrate (max 1000 characters). | |
| voiceId | No | Which voice narrates. Call pedra_music_library for the voices offered per language — a voice is only valid for the language it is listed under. Defaults to that language's first voice. | |
| language | No | Voice language, e.g. "English", "Español". Defaults to English. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the main remaining burden is workflow behavior. The description usefully discloses that it returns an audioId for downstream attachment with synced subtitles, but omits cost/credit consumption and any rate or length constraints beyond the schema's 1000-char note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the primary action is front-loaded ahead of the downstream-chaining note. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by stating the return value (audioId) and how to consume it. For a simple three-param TTS tool this is nearly sufficient; only cost/limits are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema params are richly documented (voiceId points at pedra_music_library, language defaulting rules, text length cap). The description adds no parameter meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Render a voiceover from a script via text-to-speech') and names the enabling mechanism. It is clearly distinguishable from pedra_generate_voice_script, which is the script-writing sibling, because this tool's output is audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent what to do with the result: pass the audioId to pedra_create_video / pedra_update_video as voice.audioId. That is real workflow routing, but there is no when-not-to-use guidance or prerequisite (e.g. credits) noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_generate_voice_scriptGenerate voiceover scriptA
Write a short voiceover script from property photos (and optional facts). GPT-4o vision reads the images so the script reflects what's actually shown. Returns the script text — pass it to pedra_generate_voice.
| Name | Required | Description | Default |
|---|---|---|---|
| images | No | Photos to base the script on (URLs or { imageUrl }). | |
| language | No | Script language, e.g. "English", "Español". Defaults to English. | |
| propertyCharacteristics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true, so the bar for safety disclosure is partially met, but the description adds genuinely useful behavior: GPT-4o vision actually reads the images, and the return value is raw script text meant to be chained into pedra_generate_voice. It omits cost/credit implications, which matters for a paid-generation sibling set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the core action and its downstream handoff front-loaded. Every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by stating the return value ('Returns the script text') and its consumer. The remaining gap is operational context such as credit cost and whether images are effectively required despite zero required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema already documents the image source formats, language default, and the propertyCharacteristics label/value pair. The description only adds that facts are optional, which is marginal over the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Write a short voiceover script from property photos') and immediately distinguishes itself from the sibling pedra_generate_voice by naming it as the downstream consumer. An agent can tell what this produces versus what the voice tool produces without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (photos + optional facts) and explicitly routes the result to pedra_generate_voice, which is a strong 'when to use' signal. It stops short of saying when NOT to use it or what alternative to pick if no photos exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_get_virtual_tourCheck virtual tourARead-only
Get a virtual tour: status ("processing", "ready" or "failed", with the reason), the shareable tourUrl, an embedCode iframe for a website, and its scenes and navigation links. Poll this after pedra_create_virtual_tour or pedra_add_virtual_tour_scenes. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tourId | Yes | Id from pedra_create_virtual_tour or pedra_list_virtual_tours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description's real added value is the asynchronous lifecycle disclosure (status can be "processing", "ready" or "failed", with reason) plus the polling directive. It does not mention rate limits or how long processing typically takes, but the async behavior is clearly signposted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the return payload comes first, the polling trigger second. The trailing "Read-only." is redundant with readOnlyHint and does not fully earn its place, keeping it just under a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields and their meaning, and it explains the async status lifecycle the agent must handle. Nothing needed to call a single-parameter read tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter (tourId), whose provenance is already documented in the schema ("Id from pedra_create_virtual_tour or pedra_list_virtual_tours"). The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (virtual tour) and enumerates the payload the agent receives: status with reason, tourUrl, embedCode iframe, scenes and navigation links. This clearly separates it from siblings like pedra_list_virtual_tours and pedra_update_virtual_tour.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Poll this after pedra_create_virtual_tour or pedra_add_virtual_tour_scenes" gives explicit when-to-use context and names the triggering siblings. It stops short of stating when not to use it (e.g., use list_virtual_tours for discovery), so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_list_propertiesList propertiesARead-only
List the user's Pedra properties (id, name, photo count, and an appUrl to open each in Pedra). Use this to find photos already in the account — e.g. to build a video from a listing's photos.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context by listing the return fields, which is beneficial beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence defines the tool, the second provides a usage example. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description fully explains what it does and why to use it. Complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to add parameter detail. The schema coverage is 100%, achieving the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists the user's Pedra properties and specifies the fields returned (id, name, photo count, appUrl). However, it does not differentiate from sibling tools like pedra_list_property_images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit use case (find photos for building a video) but does not mention when not to use or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_list_property_imagesList property photosARead-only
List the photos in a Pedra property as img.pedra.ai URLs, ready to pass straight to pedra_create_video or the image-editing tools. Get the propertyId from pedra_list_properties. Pass type "360" to list its 360° photos instead (their imageIds are the scenes of a virtual tour).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Which images to list: regular photos ("photo", the default) or 360° photos ("360"). | |
| propertyId | Yes | The property's id (from pedra_list_properties). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: the output are img.pedra.ai URLs ready for downstream tools, and in 360 mode the imageIds are the scenes of a virtual tour. It stops short of documenting ordering/pagination, but adds real value over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: what is returned, where to get the input, and the alternate mode. Front-loaded with the primary behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description covers the return value (img.pedra.ai URLs), the input source (pedra_list_properties), and the mode switch. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: the "360" value's imageIds are the scenes of a virtual tour, and propertyId is sourced from pedra_list_properties. That is semantic context the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the photos in a Pedra property) and specifies the return form (img.pedra.ai URLs). It clearly distinguishes the default photo listing from the 360 mode, so an agent can tell what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to siblings: get propertyId from pedra_list_properties, and the returned URLs feed directly into pedra_create_video or the image-editing tools. It also states the condition that selects the alternate mode (pass type "360").
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_list_virtual_toursList virtual toursARead-only
List the account's virtual tours (newest first) with status, share link and room count. Optionally only one property's. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| propertyId | No | Only this property's tour. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so 'Read-only' is partly redundant. The description does add value beyond the annotations, though: it discloses result ordering (newest first) and the shape of the returned records (status, share link, room count), which matters because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action and ordering lead, the optional filter follows, and the safety note is a compact trailing clause. Nothing wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and ordering, and the annotations cover the safety profile, so an agent has enough to call it correctly. Minor gaps remain: no mention of pagination or result-size limits on an account-wide listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional propertyId parameter and schema description coverage is 100%, with the schema already stating 'Only this property's tour.' The description's 'Optionally only one property's' conveys the same meaning in prose but adds no format or semantic detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the account's virtual tours') plus the ordering and the fields returned (status, share link, room count). The scope clearly differs from pedra_get_virtual_tour, but the description never names that sibling to make the distinction explicit, which is the only thing separating it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Optionally only one property's' implies the filtering use case, and the plural 'tours' implies this is the bulk-listing option versus a single-tour getter. However there is no explicit when-to-use statement, no when-not condition, and no named alternative, so usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_music_libraryList music tracksARead-only
List the background-music catalog: valid music.track values (genre keys), plus the voice languages and the narration voices offered for each of them. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the trailing 'Read-only.' adds no new information. The description does add useful behavioral context by disclosing the catalog's structure (genres plus per-genre languages and voices), but says nothing about caching, freshness, or how large the result may be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence carries the catalog contents, and the content description is not padded. The appended 'Read-only.' is redundant with the annotations and is the only wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters, no output schema, and safety fully covered by annotations, the description's job is mainly to explain what comes back — which it does by naming the genre keys, languages, and voices. Complete enough to call correctly, with only minor omissions such as result size or format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description usefully clarifies the shape of the returned catalog entries (genre keys mapped to languages and narration voices), which is the closest analogue to parameter meaning for a filterless listing tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a clear verb-plus-resource ('List the background-music catalog') and then enumerates exactly what the catalog contains: `music.track` genre keys, voice languages, and narration voices per genre. That is far more specific than a bare title restatement, though it does not explicitly contrast itself with the voice-generation siblings it feeds into.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Calling this a list of 'valid `music.track` values' implies it is a lookup/reference step used before invoking a generation tool, which is reasonable implied usage. However, no when-to-use or when-not-to-use condition is stated and no sibling (e.g. pedra_generate_voice) is named as the downstream alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_remove_objectRemove objectB
Remove an object from an image using a mask. Returns the cleaned image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| maskUrl | Yes | Mask image marking the region to remove: a public https:// URL, a data: URI, or a local file path. | |
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds the return value ('cleaned image URL'), which is useful since no output schema exists, but says nothing about credits consumed, processing time, or whether the source image is modified in place.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and followed by the return value. No filler, though it is arguably too terse given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with a fully documented schema and no output schema, the description covers what the tool does and what it returns. Missing only usage routing and cost/behavioral context, which are minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already details acceptable input forms (https URL, data URI, local path) plus the pedra_create_upload_link fallback. The description adds no parameter meaning beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (an object from an image via a mask), and it names the artifact it returns (cleaned image URL). It does not distinguish itself from sibling image-editing tools like pedra_enhance or pedra_blur, but the mask-based removal is self-evidently distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives (e.g. pedra_edit_via_prompt for text-driven edits). 'Using a mask' implies a precondition but nothing states when-not to use it or what happens if no mask region is found.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_renovationRenovate spaceB
Renovate a space (walls, floors, finishes), optionally furnished. Returns the renovated image URL.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | Renovation style. | |
| furnish | No | Whether the renovated room should be furnished (true → with furniture, false → empty). | |
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| roomType | No | Room type. Auto-detected if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds that the output is a renovated image URL, which is useful, but it omits credit/cost implications and whether the result is a new asset versus an in-place edit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, operation first and return value second, with no filler. Everything stated earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter generation tool with a fully documented schema and no output schema, the description covers the action and the return value adequately. Additional context on cost or how it relates to sibling renovation tools would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema documents each parameter thoroughly, including the upload-link fallback for imageUrl, so the baseline of 3 applies. The description only restates the optional furnished/empty notion already covered by the furnish property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (renovate) and resource (space) and enumerates the covered surfaces (walls, floors, finishes). It does not distinguish itself from close siblings like pedra_furnish or pedra_empty_room, which overlap on the furnished/empty dimension, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternative is named. The description never explains why an agent would pick this over pedra_furnish, pedra_empty_room, or pedra_edit_via_prompt, all of which operate on the same kind of input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_sky_blueReplace skyA
Replace a dull or overcast sky with a clear blue one. Returns the image URL with the new sky.
| Name | Required | Description | Default |
|---|---|---|---|
| imageUrl | Yes | Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link. | |
| skyStyle | No | Optional named sky style. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is largely covered. The description adds the return shape ('Returns the image URL with the new sky'), which matters because there is no output schema, but says nothing about whether the source image is modified, credit cost (a pedra_credits sibling exists), or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the capability stated first and the return value second. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, non-destructive edit tool it covers purpose and return value, and the schema carries the input detail. The one gap is that skyStyle is an 'optional named sky style' with no enumeration of valid names in either the schema or the description, leaving the agent unable to pick a value confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, including the detailed imageUrl sourcing rules and the upload-link fallback. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Replace ... sky') plus a concrete condition ('dull or overcast') and an explicit outcome ('clear blue'). It does not differentiate itself from siblings like pedra_edit_via_prompt or pedra_enhance, which an agent might reasonably consider for the same job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'dull or overcast sky' implies the trigger condition, so usage is inferable. There is no explicit when-not guidance or named alternative for sky edits that could be done via pedra_edit_via_prompt.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_update_videoEdit existing videoA
Edit an existing video (by videoId) without re-rendering unchanged clips — only new/changed photos re-animate and cost credits; reordering, music, voice, branding and text re-stitch for free. Omit images to change only audio/text/branding while keeping the current timeline. Omit music/voice/branding/ending text to leave them unchanged. Blocks until rendered and returns the new video URL.
| Name | Required | Description | Default |
|---|---|---|---|
| music | No | ||
| voice | No | ||
| images | No | Full ordered image list to rebuild the timeline; matching photo+effect clips are reused. Omit to edit only audio/text and keep the current timeline. | |
| videoId | Yes | Id of the video to edit (from pedra_create_video). | |
| branding | No | ||
| isVertical | No | Force a vertical (9:16) video (only when images are sent). | |
| endingTitle | No | ||
| endingSubtitle | No | ||
| propertyCharacteristics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations covering only safety hints, the description carries the behavioral payload and does so well: it explains the incremental re-render/credit-cost model, that reordering/music/voice/branding/text re-stitch for free, that the call blocks until rendered, and that it returns the new video URL. This is real value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with identity, then the cost/behavior model, then the return value. No filler; every clause adds actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter nested-object mutation with no output schema, the description covers cost behavior, omission defaults, blocking, and the return value. It omits guidance on a few nested params, but nothing critical for a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% across 9 parameters, so the description must compensate, and it does for the high-impact ones (videoId, images, omission semantics for nested audio/text/branding objects). It still leaves several nested fields (isVertical, propertyCharacteristics, watermark details) to the schema, so not a perfect 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Edit an existing video (by videoId)') and implicitly distinguishes itself from pedra_create_video and pedra_edit_via_prompt by scoping to editing an existing render. An agent can identify the tool from the first clause alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit operational rules: omit `images` to keep the current timeline, omit `music`/`voice`/`branding`/ending text to leave them unchanged. It does not name a sibling alternative (e.g. pedra_edit_via_prompt) or state when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pedra_update_virtual_tourEdit virtual tourADestructive
Change a finished virtual tour in place: rename it or its rooms, reorder rooms (the first one is where the tour opens), remove rooms, replace its navigation links, or change how the navigation points look. Free and instant. The tour's public link shows the change right away. Get sceneIds from pedra_get_virtual_tour.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New tour title. | |
| links | No | Replaces ALL navigation links. Each is one direction; add the return link separately. | |
| tourId | Yes | The tour to change. | |
| language | No | Language of the tour page and of AI room names. Defaults to "en". | |
| sceneNames | No | New room names, as { sceneId: "Kitchen" }. | |
| sceneOrder | No | Every sceneId of the tour in the new order. The first one opens the tour. | |
| showLabels | No | Always show room names next to the navigation points. | |
| removeScenes | No | sceneIds to take out of the tour (the photos stay in the property). Their links go too. | |
| navigationSize | No | Size of the navigation points. | |
| navigationStyle | No | Look of the navigation points. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true; the description adds real value on top by stating the operation is free and instant and that the public link reflects the change immediately. It stops short of calling out irreversibility or confirmation requirements for the destructive removals, which is what a 5 would need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then lists the supported mutations, then gives the operational facts and the helper-tool pointer in two short sentences. Dense but every clause maps to a distinct capability; only the parenthetical about the first scene borders on restating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter destructive mutation tool with no output schema, the description covers what changes, the side effects on the public link, and where to source sceneIds. It omits failure behavior and whether removed links/photos are recoverable, which are the remaining gaps an agent would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description groups operations and maps them to parameters (rename → name/sceneNames, reorder → sceneOrder, remove → removeScenes, links → links), but most of that detail is already in the schema and it adds no extra syntax or constraint information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Change/edit in place) and resource (virtual tour), then enumerates the concrete mutations supported: rename tour/rooms, reorder, remove rooms, replace links, restyle navigation. It is clearly distinguishable from sibling tools like pedra_create_virtual_tour and pedra_add_virtual_tour_scenes because it operates on a finished tour rather than building one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Change a finished virtual tour in place" scopes usage to an existing, completed tour, and it explicitly routes the agent to pedra_get_virtual_tour for sceneIds. It does not state exclusions (e.g. don't use for adding scenes – that's pedra_add_virtual_tour_scenes), so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
22 tool updates
v0.5.1- Changed
pedra_add_images_to_property2 fields changed- changed
Input schema / properties / imageUrls / descriptionPrevious value: -"Up to 20 image URLs to fetch and add to the property."New value: +"Image URLs to fetch and add to the property: up to 20 photos, or up to 10 when type is \"360\"." - added
Input schema / properties / typeAdded value: +{ + "description": "What the images are: regular photos (\"photo\", the default) or 360° photos (\"360\").", + "enum": [ + "photo", + "360" + ], + "type": "string" +}
- Added
pedra_add_local_panoramas - Added
pedra_add_virtual_tour_scenes - Changed
pedra_blur1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Added
pedra_create_upload_link - Changed
pedra_create_video1 field changed- changed
Input schema / properties / images / items / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Added
pedra_create_virtual_tour - Changed
pedra_edit_via_prompt1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_empty_room1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_enhance1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_enhance_and_correct_perspective1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_furnish2 fields changed- removed
Input schema / properties / creativityRemoved value: -{ - "description": "Strength of the AI transformation. Defaults to \"Medium\".", - "enum": [ - "Low", - "Medium", - "High" - ], - "type": "string" -} - changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_generate_voice1 field changed- added
Input schema / properties / voiceIdAdded value: +{ + "description": "Which voice narrates. Call pedra_music_library for the voices offered per language — a voice is only valid for the language it is listed under. Defaults to that language's first voice.", + "type": "string" +}
- Changed
pedra_generate_voice_script1 field changed- changed
Input schema / properties / images / items / anyOfPrevious value: -[ - { - "description": "Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically).", - "type": "string" - }, - { - "additionalProperties": false, - "properties": { - "imageUrl": { - "$ref": "#/properties/images/items/anyOf/0" - } - }, - "required": [ - "imageUrl" - ], - "type": "object" - } -]New value: +[ + { + "description": "Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link.", + "type": "string" + }, + { + "additionalProperties": false, + "properties": { + "imageUrl": { + "$ref": "#/properties/images/items/anyOf/0" + } + }, + "required": [ + "imageUrl" + ], + "type": "object" + } +]
- Added
pedra_get_virtual_tour - Changed
pedra_list_property_images1 field changed- added
Input schema / properties / typeAdded value: +{ + "description": "Which images to list: regular photos (\"photo\", the default) or 360° photos (\"360\").", + "enum": [ + "photo", + "360" + ], + "type": "string" +}
- Added
pedra_list_virtual_tours - Changed
pedra_remove_object1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_renovation2 fields changed- removed
Input schema / properties / creativityRemoved value: -{ - "description": "Strength of the AI transformation. Defaults to \"Medium\".", - "enum": [ - "Low", - "Medium", - "High" - ], - "type": "string" -} - changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_sky_blue1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Changed
pedra_update_video1 field changed- changed
Input schema / properties / images / items / properties / imageUrl / descriptionPrevious value: -"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file on this computer (the file is read and inlined automatically). If the photo is on the user's device and can't be read from here (e.g. it's on their phone), get a link from pedra_create_upload_link."
- Added
pedra_update_virtual_tour
8 tool updates
v0.4.0- Removed
pedra_add_images_to_project - Added
pedra_add_images_to_property - Removed
pedra_create_project - Added
pedra_create_property - Removed
pedra_list_project_images - Removed
pedra_list_projects - Added
pedra_list_properties - Added
pedra_list_property_images
9 tool updates
v0.3.0- Added
pedra_add_images_to_project - Added
pedra_create_project - Changed
pedra_create_video4 fields changed- added
Input schema / properties / music / properties / track / descriptionAdded value: +"Genre key from pedra_music_library (e.g. acoustic, chill, cinematic, electronic, upbeat)." - added
Input schema / properties / voice / properties / audioIdAdded value: +{ + "description": "Id of a voiceover from pedra_generate_voice. Drives the narration and its synced subtitles.", + "type": "string" +} - added
Input schema / properties / voice / properties / audioUrl / descriptionAdded value: +"Legacy alias for audioId." - added
Input schema / properties / voice / properties / showSubtitlesAdded value: +{ + "description": "Burn in word-synced subtitles. Defaults to true.", + "type": "boolean" +}
- Added
pedra_generate_voice - Added
pedra_generate_voice_script - Added
pedra_list_project_images - Added
pedra_list_projects - Added
pedra_music_library - Added
pedra_update_video
10 tool updates
v0.1.2- Changed
pedra_blur1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_create_video1 field changed- changed
Input schema / properties / images / items / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_edit_via_prompt1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_empty_room1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_enhance1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_enhance_and_correct_perspective1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_furnish1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_remove_object2 fields changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)." - changed
Input schema / properties / maskUrl / descriptionPrevious value: -"URL of the mask image marking the region to remove."New value: +"Mask image marking the region to remove: a public https:// URL, a data: URI, or a local file path."
- Changed
pedra_renovation1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
- Changed
pedra_sky_blue1 field changed- changed
Input schema / properties / imageUrl / descriptionPrevious value: -"URL (or data: URL) of the source image."New value: +"Source image: a public https:// URL, a data: URI, or an absolute path to a local image file (the file is read and inlined automatically)."
12 tool updates
v0.1.0- First observed
pedra_blur - First observed
pedra_create_video - First observed
pedra_credits - First observed
pedra_edit_via_prompt - First observed
pedra_empty_room - First observed
pedra_enhance - First observed
pedra_enhance_and_correct_perspective - First observed
pedra_feedback - First observed
pedra_furnish - First observed
pedra_remove_object - First observed
pedra_renovation - First observed
pedra_sky_blue
TDQS
Scored across 27 tools
Most tools target a clearly distinct operation (enhance vs. furnish vs. renovate vs. sky replacement vs. blur), and descriptions explicitly state boundaries. The main overlap is the trio of image-intake tools (pedra_add_images_to_property, pedra_add_local_panoramas, pedra_create_upload_link), but the descriptions carefully specify when to use each, keeping confusion low.
All tools share the pedra_ prefix and snake_case, and nearly all follow a verb_noun pattern (list_properties, create_virtual_tour, add_virtual_tour_scenes, generate_voice). A few deviate to noun-only or verb-only forms (pedra_credits, pedra_feedback, pedra_renovation, pedra_enhance), but these remain readable and largely predictable.
At 27 tools the surface is heavy, exceeding the typical 3-15 sweet spot, largely due to nine distinct image-editing operations plus separate video, tour, voice, and property management families. Each tool does earn a distinct role, so it is justified rather than redundant, but it sits at the upper bound of what is comfortable.
Core lifecycle for the domain is well covered: property creation, image intake, rich editing, video creation/update, virtual tour create/get/list/update/add-scenes, voice scripting, credits, and feedback. Gaps are minor—no delete operations for properties, videos, or tours, and no list-videos tool—but these are workaroundable and not central to the main workflows.
Maintenance
Related MCP Connectors
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Official MCP server for subfeed.app — the cloud for agents. 15+ tools for AI agents to register, build, and deploy other agents. Zero human required. Start here: subfeed.app/skill.md
- LovableOAuthdev.lovable
Official MCP server for Lovable, the AI-powered full-stack app builder.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
11
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for AI image generation, transformation, and style management via the Recraft API. Provides tools for text-to-image, image-to-image, inpainting, background operations, vectorization, upscaling, and custom style creation.1637 npm10MIT
- AlicenseAqualityAmaintenanceOfficial MCP server for Rendobar. Lets AI agents run serverless media processing and upload local files.975 npm1MIT
- AlicenseNot gradedqualityDmaintenanceOpen-source MCP server for AI virtual staging and real-estate photography editing. It turns the AI HomeDesign photo API into natural-language tools for virtual staging, redesign, photo enhancement, and more.MIT
- AlicenseAqualityCmaintenanceRead-only MCP server exposing AI Room Design's image generation styles, pricing, FAQ, and official links to MCP-compatible clients like Claude Desktop, Cursor, and Windsurf.3MIT