Farm Database PostgreSQL species catalog, plantings, and observations

The farm database is a PostgreSQL 17 instance running on CT100 (home Proxmox, 192.168.8.100) inside a Docker container named postgresql. It stores the species catalog, plantings, observations, harvests, equipment, and inventory for the 93-acre Brownsville property.

Access
Method Details
Database farmdb
User farmuser
Password Set via POSTGRES_PASSWORD env var β€” check with docker inspect postgresql on CT100
Container postgresql on CT100 (Docker)
Port 5432 (Docker-proxied)
MCP Server farm-data β€” 19 tools, config at ~/.mcp-servers/farm-data/server.py
Read queries Via farm-data:farm_sql MCP tool (read-only SELECT)
Write queries SSH pipeline (see below)
GUI client Postico 2 with SSH tunnel through hpve
Plant ID Webhook on CT100 port 8902 β€” plantid.edmd.me

SSH write pipeline:

cat /Users/bee/farm_update.sql | ssh -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null root@192.168.8.221 \
  'pct exec 100 -- docker exec -i postgresql psql -U farmuser -d farmdb'

Direct psql access (from CT100):

ssh root@192.168.8.221 'pct exec 100 -- docker exec -it postgresql psql -U farmuser -d farmdb'

Postico 2 connection (works anywhere via NetBird):

Field Value
Host 127.0.0.1
Port 5432
User farmuser
Database farmdb
SSH Host 192.168.8.221
SSH User root
SSH Key /Users/bee/.ssh/id_ed25519
Schema Overview

34 tables organized around a central species catalog with category-specific extension tables.

Core Tables:

Table Purpose
species Master species catalog β€” 44 columns covering identification, growing conditions, ecological value, propagation, and care
species_perennial Extension: division frequency, clump spread, dies back, winter interest, long-lived, cut flower
species_berry Extension: berry-specific attributes
species_tree Extension: tree-specific attributes
species_[category] 15 total extension tables β€” one per plant category
collections Named plant groupings (Seed Collecting Garden, Berry Garden, etc.)
species_collections Many-to-many join between species and collections
species_images Photo tracking β€” links images to species and individual plantings over time

Operational Tables:

Table Purpose
plantings Individual plants/plantings with location, date, source, status, cost
observations Field observations β€” growth, bloom, pest, disease, wildlife sightings
harvests Harvest records with weight, quantity, quality notes
hives Beehive registry
hive_inspections Beehive inspection logs
locations Property zones and planting areas (37 defined)
inventory Seeds, supplies, and materials on hand
equipment Tools and equipment registry
suppliers Nurseries, seed companies, supply vendors
orders / order_items Purchase tracking
Species Images

The species_images table tracks photos of species and individual plantings over time.

Column Purpose
species_id Which species (required)
planting_id Optional link to a specific planting for individual plant tracking
image_path File path on nvmepool or Mac Studio
image_type seed_packet, seedling, vegetative, bloom, fruit, harvest, dormant, habitat, damage
caption Free text description
taken_date When the photo was taken

Image storage: /nvmepool/images/farm/ with subdirectories seed-packets/, plantings/, species/. Accessible via SMB share “Farm Images” on hpve.

Plant ID pipeline: The webhook at plantid.edmd.me (port 8902 on CT100) accepts plant photos, identifies them via Plant.id API, and automatically links or creates species in the database. iOS Shortcut available for phone camera β†’ identify β†’ database workflow.

Species Table β€” Key Fields

The species table has 44 columns. Fields are populated via web research from multiple authoritative sources (NC State Extension, Ohio State Extension, Prairie Moon Nursery, Xerces Society, and others).

Identification: common_name, scientific_name, variety, category, description, native_status, hardiness_zone

Growing Conditions: sun_requirement, water_requirement, drought_tolerance, wet_feet_tolerance, deer_resistance, invasiveness_risk

Size & Spacing: ecological_layer, mature_height_ft, mature_spread_ft, spacing_inches, lifespan, growth_rate

Bloom & Pollinator: bloom_color, bloom_start_month, bloom_end_month, pollinator_value, pollinator_groups, host_plant_for, wildlife_value

Uses & Properties: edible, medicinal, nitrogen_fixer, primary_uses

Propagation & Care: propagation_methods, seed_collection_notes, cold_stratification_days, self_sows, fertilization_notes, pruning_notes, common_diseases, planting_guide

Reference: notes, sources (Ohio State Extension URLs), web_links (NC State Plant Toolbox URLs)

Planting Status Lifecycle: researching β†’ planned β†’ ordered β†’ in_inventory β†’ planted β†’ established β†’ propagating β†’ dormant β†’ dead β†’ removed

Enum Types:

Type Values
three_level low, medium, high
lifespan_type annual, biennial, short_lived_perennial, long_lived_perennial, tree_50_plus
growth_rate slow, medium, fast
plant_category tree, shrub, vine, grass, perennial, annual, biennial, vegetable, herb, mushroom, cover_crop, berry, groundcover, bulb, fern, aquatic, rose
native_status ohio_native, north_american_native, non_native, invasive_concern
sun_req full_sun, part_sun, part_shade, full_shade
water_req dry, dry_to_medium, medium, medium_to_wet, wet
ecological_layer canopy, sub_canopy, shrub, herbaceous, groundcover, vine, root_crop, fungal
Collections
Collection Status Species Description
Seed Collecting Garden Active 25 Native Ohio species for seed collection and propagation
Berry Garden Active 8 92 plants across 9 raspberry varieties
Hummingbird Garden Planned 31 Tubular flowers for ruby-throated hummingbirds
Willow Collection Planned 13 Ohio-native Salix species β€” keystone genus, 399+ Lepidoptera
Butterfly Garden Planned 5 Host plants and nectar sources
Cut Flower Garden Planned 22 Ohio native perennials for cutting β€” May–October bloom succession
Veggie Garden 2026 Active 60 2026 vegetable seed packets
Herb Garden 2026 Active 14 2026 culinary and aromatic herbs
Medicinal Garden 2026 Active 17 Medicinal herbs and plants
Vegetable Garden Active 0 16 raised beds, 4Γ—8 ft (general)
Herb Garden Planned 0 Culinary, medicinal, aromatic (general)
Native Perennial Garden Planned 0 Ohio natives for habitat restoration
Medicinal Garden Planned 0 Plants with medicinal properties (general)
Rain Garden Planned 0 Wet-tolerant natives for runoff capture
Night Garden Planned 0 Moth-pollinated and evening-blooming
Seed & Plant Sources
Source Items Type
Victory Seeds 75 Seed packets (veggies, herbs, medicinals, flowers)
Dawes Arboretum Gift Shop 11 Live plants (trees, shrubs, perennials)
Livingston Seeds 10 Seed packets (ornamental flowers)
Burpee Seeds 2 Seed packets (cosmos, canterbury bells)
Harris Seeds 2 Seed packets (pumpkin, peas)
Ferry-Morse Seeds 1 Seed packets (marigold)
Farm MCP Server

The farm-data MCP server exposes 19 tools for querying and managing the database from Claude Desktop and Claude Code.

Tool Purpose
farm_dashboard Quick overview β€” species count, plantings, collections
farm_search_species Search species by name, scientific name, or variety
farm_get_species Full details for a species by ID
farm_add_species Add a new species to the catalog
farm_list_collections List all garden collections
farm_collection_species List species in a collection
farm_add_to_collection Add a species to a collection
farm_list_plantings List plantings, filtered by location/species/status
farm_add_planting Record a new planting
farm_update_planting_status Update planting lifecycle status
farm_log_observation Log a field observation
farm_recent_observations Get recent observations
farm_log_harvest Log a harvest
farm_harvest_report Harvest totals by species for a year
farm_check_inventory Show current inventory
farm_list_locations List property zones
farm_list_suppliers List suppliers
farm_log_hive_inspection Log a beehive inspection
farm_sql Run read-only SQL queries

Server location: ~/.mcp-servers/farm-data/server.py

Config in Claude Desktop: Add to mcpServers in claude_desktop_config.json:

"farm-data": {
  "command": "python3",
  "args": ["/Users/bee/.mcp-servers/farm-data/server.py"]
}

Note: farm_sql is read-only (SELECT only). All writes must go through the SSH pipeline or use specific farm_add_* / farm_log_* tools.

Plant ID Pipeline

Automated plant identification via the Plant.id API, running as a systemd service on CT100.

Service plant-id.service on CT100
Port 8902
URL plantid.edmd.me
API Plant.id v3 by Kindwise (100 free credits, then €0.05/credit)
Script /opt/plant_id_webhook.py on CT100

Endpoints:

Method Path Purpose
GET / Web UI β€” upload and identify from any browser
POST /identify API β€” multipart form upload, returns JSON with species match
GET /status API credits and database stats

iOS Shortcut: “Identify Plant” β€” take photo β†’ POST to webhook β†’ shows result. Requires NetBird or home LAN.

Workflow: Photo β†’ Plant.id API β†’ species match against farmdb β†’ auto-link image if match found, auto-create species if confidence >70%, flag for review if low confidence.

Photos saved to: /nvmepool/images/farm/plantings/

Species Enrichment Process

When adding new species or filling in missing data, the species-enrichment skill (~/skills/species-enrichment/SKILL.md) defines the full workflow:

  1. Web research β€” search authoritative sources (NC State Extension, Ohio State Extension, Prairie Moon, GrowItBuildIt, Xerces Society, etc.). Never populate from a single source or training data alone.
  2. Build SQL β€” generate UPDATE/INSERT statements with correct enum values.
  3. Write to Mac β€” save SQL to /Users/bee/farm_update.sql via Filesystem:write_file.
  4. Pipe via SSH β€” execute through the SSH pipeline to the PostgreSQL container.
  5. Verify β€” spot-check with farm_get_species.

Each species gets:

  • web_links β€” NC State Plant Toolbox URL (pattern: plants.ces.ncsu.edu/plants/{genus}-{species}/)
  • sources β€” Ohio State Extension (Ohioline) fact sheet URL when available
Species Web App

A browser-based species catalog at farm.edmd.me β€” search, filter, and view full species detail pages.

Container farm-web on CT100 (Docker)
Port 8420
URL farm.edmd.me
Stack FastAPI + asyncpg + vanilla JS
Source Docker build from /opt/farm-web/ on CT100

Features: full-text search by common/scientific name, filter by category and native status, species detail pages with growing conditions, bloom timing, pollinator groups, wildlife value, and collection membership. Links out to NC State Plant Toolbox and Ohio State Extension.

Tana integration: Each species node in Tana’s Brownsville workspace has a web_url field linking to its detail page on farm.edmd.me. Collections are mirrored as Tana nodes with species as children.

Tana ↔ PostgreSQL Bridge

The farm database and Tana Brownsville workspace are bidirectionally linked:

PostgreSQL β†’ Tana (collections sync):

  1. Query collections and their species from farmdb via farm_list_collections + farm_collection_species
  2. Create/update collection nodes in Tana with species as children (via tana-local:import_tana_paste)
  3. Each species child node in Tana gets the common name, scientific name, and a link to the web app

PostgreSQL β†’ Tana (species web URLs):

  • Species nodes in Tana’s Brownsville workspace have a web_url field
  • After the web app deployed, all species nodes were updated with farm.edmd.me/species/{id} links
  • Enables one-click from Tana research notes to the full species profile

Tana β†’ PostgreSQL (research β†’ enrichment):

  • New species are researched in Tana (notes, sources, ecological context)
  • Once ready, the species-enrichment skill creates SQL from the research
  • SQL is piped via SSH to CT100’s PostgreSQL container
  • The tana_node_id column on the species table links back to the Tana node

Key fields for the link:

  • species.tana_node_id β€” Tana node UUID for the species
  • species.web_links β€” NC State Plant Toolbox URL
  • Tana species node web_url field β€” farm.edmd.me detail page URL
Current Stats (May 2026)
Metric Count
Species in catalog 200
Collections defined 15
Locations defined 37
Plantings tracked 184 (103 in inventory, 80 planned, 1 planted)
Images linked 0 (table ready, pipeline operational)
Observations logged 0
Harvests logged 0

All 200 species are fully enriched with web-researched data across 15+ fields including pollinator groups, wildlife value, host plants, diseases, planting guides, and NC State Plant Toolbox links.