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.
| 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 |
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 |
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.
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 |
| 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 |
| 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) |
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.
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/
When adding new species or filling in missing data, the species-enrichment skill (~/skills/species-enrichment/SKILL.md) defines the full workflow:
- 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.
- Build SQL β generate UPDATE/INSERT statements with correct enum values.
- Write to Mac β save SQL to
/Users/bee/farm_update.sqlviaFilesystem:write_file. - Pipe via SSH β execute through the SSH pipeline to the PostgreSQL container.
- 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
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.
The farm database and Tana Brownsville workspace are bidirectionally linked:
PostgreSQL β Tana (collections sync):
- Query collections and their species from farmdb via
farm_list_collections+farm_collection_species - Create/update collection nodes in Tana with species as children (via
tana-local:import_tana_paste) - 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_urlfield - 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_idcolumn on thespeciestable links back to the Tana node
Key fields for the link:
species.tana_node_idβ Tana node UUID for the speciesspecies.web_linksβ NC State Plant Toolbox URL- Tana species node
web_urlfield β farm.edmd.me detail page URL
| 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.