Back to Blog

Landscape Design as an API Call: Building AI Agents with Yarda's MCP Server

Y
Yarda Team
••8 min read
Landscape Design as an API Call: Building AI Agents with Yarda's MCP Server

When we built Yarda, we focused on making AI landscape design accessible through a beautiful web interface. But what if you're building an AI agent, a real estate platform, or a contractor CRM that needs to embed landscape design capabilities directly? That's where our Agent API comes in.

Today, we're launching three ways to integrate Yarda into any AI system:

  1. MCP Server — For AI assistants like Claude, ChatGPT, and custom agents
  2. REST API — For traditional web and mobile applications
  3. A2A Protocol — For multi-agent systems that need to delegate tasks

Let's walk through each approach.


The MCP Server: AI-Native Landscape Design

The Model Context Protocol (MCP) server is the simplest way to add landscape design to any AI agent. If you're running Claude Desktop, an AI coding assistant, or any MCP-compatible system, you can add Yarda in under 5 minutes.

Getting Started

First, add Yarda to your MCP configuration:

{
  "mcpServers": {
    "yarda": {
      "command": "npx",
      "args": ["-y", "@yarda/mcp-server"]
    }
  }
}

Or run it directly:

npx -y @yarda/mcp-server

The 6 Tools

Once connected, your agent has 6 tools available:

1. get_property_info

Get satellite imagery, property boundaries, and lot dimensions for any address.

# Python example with MCP SDK
result = await server.tools.call("get_property_info", {
    "address": "123 Oak Street, Palo Alto, CA 94301",
    "zoom": 18
})

Returns:

{
  "address": "123 Oak Street, Palo Alto, CA 94301",
  "satellite_image_url": "https://storage.yarda.com/sat/123-oak.png",
  "boundary_polygon": [{"x": 0.1, "y": 0.2}, ...],
  "lot_dimensions": {
    "area_sqft": 8500,
    "width_ft": 65,
    "depth_ft": 130
  },
  "coordinates": {"lat": 37.4419, "lng": -122.1430}
}

2. generate_design

Generate a complete landscape design with AI-powered renders.

result = await server.tools.call("generate_design", {
    "address": "456 Maple Ave, Los Altos, CA 94022",
    "style": "modern_minimalist",
    "yard_area": "back",
    "preferences": {
        "features": ["patio", "native_plants", "fire_pit"],
        "budget_tier": "mid"
    }
})

Returns immediately with a design_id. Poll GET /api/agent/designs/{id} until status is completed.

3. estimate_materials

Get material quantities and cost estimates for any completed design.

result = await server.tools.call("estimate_materials", {
    "design_id": "design_abc123",
    "features": ["patio", "drought_plants"]
})

4. list_styles

See all available design styles with descriptions.

result = await server.tools.call("list_styles", {})

5. get_pricing

Get current pricing for Free and Pro plans.

# Get Pro plan details
result = await server.tools.call("get_pricing", {"plan": "pro"})

6. create_proposal

Generate a shareable client proposal with your branding.

result = await server.tools.call("create_proposal", {
    "design_id": "design_abc123",
    "contractor_info": {
        "name": "Jane Smith",
        "company": "Green Valley Landscapes",
        "email": "jane@greenvalley.com",
        "phone": "650-555-0123"
    },
    "markup_percentage": 25
})

Returns a public URL: https://yarda.pro/p/proposal_xyz


The REST API: For Web and Mobile Apps

If you're building a traditional web or mobile application, our REST API gives you full control.

Base URL

Production: https://yarda-api-production.up.railway.app

Authentication

Generate an API key from your dashboard or via the API:

# Create an API key
curl -X POST https://yarda-api-production.up.railway.app/api/agent/api-keys \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

Use the API key in requests:

curl https://yarda-api-production.up.railway.app/api/agent/property-info \
  -H "X-API-Key: yarda_ak_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"address": "789 Pine Road, Mountain View, CA 94043"}'

Key Endpoints

Property Info

POST /api/agent/property-info
{
  "address": "789 Pine Road, Mountain View, CA 94043",
  "zoom": 18
}

Create Design

POST /api/agent/designs
{
  "address": "789 Pine Road, Mountain View, CA 94043",
  "style": "california_native",
  "yard_area": "front",
  "preferences": {
    "features": ["native_plants", "permeable_pavers"],
    "budget_tier": "premium"
  }
}

Returns 202 Accepted with a design_id. Poll GET /api/agent/designs/{design_id} for results.

Batch Design

POST /api/agent/designs/batch

Process up to 20 designs in one call:

{
  "designs": [
    { "address": "123 Oak St", "style": "modern", "yard_area": "front" },
    { "address": "456 Pine Ave", "style": "cottage", "yard_area": "back" },
    { "address": "789 Maple Dr", "style": "desert", "yard_area": "full" }
  ]
}

Check Design Status

GET /api/agent/designs/{design_id}
{
  "design_id": "design_abc123",
  "status": "completed",
  "renders": [
    { "type": "2d_plan", "url": "https://..." },
    { "type": "front_oblique", "url": "https://..." },
    { "type": "back_oblique", "url": "https://..." }
  ],
  "materials": [
    {
      "name": "Decomposed Granite",
      "quantity": "200 sq ft",
      "estimated_cost": 450
    },
    {
      "name": "Native grasses",
      "quantity": "15 gallons",
      "estimated_cost": 225
    }
  ],
  "estimated_cost": 12500
}

Full Example: Python Integration

import requests

API_KEY = "yarda_ak_your_key"
BASE_URL = "https://yarda-api-production.up.railway.app"

headers = {"X-API-Key": API_KEY}

# Step 1: Get property info
prop = requests.post(f"{BASE_URL}/api/agent/property-info",
    headers=headers,
    json={"address": "123 Main St, San Francisco, CA 94102"}
).json()

print(f"Lot size: {prop['lot_dimensions']['area_sqft']} sq ft")

# Step 2: Generate design
design = requests.post(f"{BASE_URL}/api/agent/designs",
    headers=headers,
    json={
        "address": "123 Main St, San Francisco, CA 94102",
        "style": "modern_minimalist",
        "yard_area": "front"
    }
).json()

print(f"Design ID: {design['design_id']}, Status: {design['status']}")

# Step 3: Poll until complete
import time
while design['status'] == 'processing':
    time.sleep(5)
    design = requests.get(f"{BASE_URL}/api/agent/designs/{design['design_id']}",
        headers=headers
    ).json()

print(f"Design complete! Renders: {len(design['renders'])} views")

A2A Protocol: For Multi-Agent Systems

The Agent-to-Agent (A2A) protocol is for systems where multiple AI agents need to collaborate. Yarda implements the A2A specification, so any A2A-compatible agent can delegate landscape design tasks to Yarda.

Agent Card

Yarda's public agent card:

GET /.well-known/agent-card.json
{
  "name": "Yarda Landscape Design Agent",
  "url": "https://yarda-api-production.up.railway.app",
  "description": "AI-powered landscape design and material estimation",
  "supportedInterfaces": [
    {
      "type": "A2A",
      "url": "https://yarda-api-production.up.railway.app/a2a/v1"
    }
  ],
  "extensions": {
    "yarda": {
      "restBaseUrl": "https://yarda-api-production.up.railway.app/api/agent",
      "mcpBaseUrl": "https://yarda-api-production.up.railway.app/mcp"
    }
  },
  "skills": [
    {
      "id": "property_analysis",
      "name": "Property Analysis",
      "description": "Get satellite imagery, boundaries, and dimensions"
    },
    {
      "id": "landscape_design",
      "name": "Landscape Design",
      "description": "Generate AI landscape designs with material estimates"
    }
  ]
}

Sending Tasks

POST /a2a/v1/message:send
{
  "message": {
    "role": "user",
    "parts": [
      {
        "kind": "text",
        "text": "Design a modern minimalist front yard for 123 Oak St, Palo Alto"
      }
    ]
  },
  "skill": "landscape_design",
  "metadata": {
    "address": "123 Oak St, Palo Alto, CA 94301",
    "style": "modern_minimalist"
  }
}

Use Cases

Real Estate Agents

Automatically generate landscape proposals for property listings. Attach before/after renders to MLS listings.

Insurance Companies

Pre-loss landscape documentation and post-disaster damage assessment with accurate material estimates.

Landscape Contractors

Generate proposals on-site with iPad. Pull property data, create designs, and send proposals before leaving the driveway.

Home Inspectors

Include landscape condition and maintenance recommendations in standard home inspections.

Smart Home Assistants

"Design a drought-resistant front yard" → AI assistant coordinates with Yarda, returns renders.


Pricing

PlanPriceLimits
Free$05 designs/month
Pro$29/month50 designs/month
EnterpriseCustomUnlimited + API

All plans include the MCP server, REST API, and A2A protocol access.


Get Started

  1. Sign up at yarda.ai — Free tier includes 5 designs/month
  2. Get your API key from the dashboard
  3. Choose your integration: MCP (fastest), REST (most control), or A2A (multi-agent)
  4. Start building — Join our Discord if you have questions

Documentation: docs.yarda.ai API Reference: docs.yarda.ai/api GitHub: github.com/yarda/yarda


Questions about enterprise pricing or custom integrations? Talk to us

Share this post:

Ready to Transform Your Yard?

Get 3 free AI-powered landscape designs in minutes

Start Designing Now