seed-mcp scaffold: clone docs-mcp-template, customize for crop_seed PRODUCT_NAME
Image rebuild (skip scrape) / build (push) Failing after 7s
Image rebuild (skip scrape) / build (push) Failing after 7s
Sibling project to crop-chem-docs, same MCP-template lineage. Corpus is
seed/hybrid varieties across 6 vendors instead of pesticide labels.
What's customized vs. the template:
- CLAUDE.md: vendor matrix, build priority, Pioneer fallback policy,
canonical sidecar schema (per-crop), Golden Harvest disease-scale
reversal gotcha, no-IPv6 / HTTPS-clone note
- README.md: vendor coverage table, tool list, phase status
- Dockerfile: PRODUCT_NAME=crop_seed default, sources.json (not
bundles.json), HYBRID_SEARCH=true, OLLAMA_URL + RERANK_URL Docker
DNS defaults (same llama-rerank sidecar as crop-chem-docs)
- .gitea/workflows/refresh.yml: monthly cron (seed catalogs move
slowly), 5 GREEN scraper steps, corpus-YYYY.MM.DD tag for Drawbar
pinning, continue-on-error on GC step
- .gitea/workflows/image-only.yml: paths filter + cancel-in-progress
concurrency group
- scripts/registry_gc.py: lifted from crop-chem-docs (correct Gitea
packages API URL + UA header to bypass CF block on default
Python-urllib UA)
- sources.json: catalog of 6 sources + scope_filter + per-source
schema notes + Pioneer-exclusion rationale
- scrape/runner.py: dispatcher with --all = GREEN-only
- scrape/sources/{bayer_seeds,golden_harvest,nk,agripro,becks_pfr,
becks_products}.py: stub modules with implementation notes
- docs_mcp/server.py: PRODUCT_NAME default → crop_seed,
PRODUCT_DOCS_URL → repo URL
Pioneer is intentionally NOT a source. ToS bans automation; dealer
locator is login-gated. The MCP returns a curated fallback lesson
directing the user to pioneer.com.
Next phases:
- Phase 1: implement bayer_seeds (lift-and-shift from crop-chem-docs
Bayer scraper; same __NEXT_DATA__ infra)
- Phase 7: curate eval/queries.jsonl
- Phase 11: lessons.md with Pioneer fallback + disease-scale notes
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+61
@@ -0,0 +1,61 @@
|
||||
# seed-mcp MCP server — production image.
|
||||
#
|
||||
# Structure: copy code first, then the regenerable indexes last so a
|
||||
# code-only change doesn't invalidate the corpus COPY layer.
|
||||
#
|
||||
# The container runs the MCP server via streamable-http on PORT 8000.
|
||||
# Override via MCP_HOST / MCP_PORT env if you front it with a different
|
||||
# reverse-proxy setup.
|
||||
#
|
||||
# Image is self-contained — corpus, Chroma collection, and BM25 db are
|
||||
# all baked in. Drawbar's docker-compose pulls the image and runs it;
|
||||
# no host volume mounts required for serve.
|
||||
#
|
||||
# RERANK_URL is set at compose time (points at the llama.cpp sidecar
|
||||
# on trashpanda's Tesla P4 — SHARED with crop-chem-docs). OLLAMA_URL
|
||||
# is set at compose time too. Defaults below assume same-stack Docker
|
||||
# DNS names.
|
||||
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Install Python deps first for cacheability.
|
||||
COPY requirements.txt /app/
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Code.
|
||||
COPY scrape /app/scrape
|
||||
COPY rag /app/rag
|
||||
COPY docs_mcp /app/docs_mcp
|
||||
|
||||
# Source catalog. Lists the corpus sources (Bayer seeds + Golden
|
||||
# Harvest + NK + AgriPro + Beck's PFR + Beck's products).
|
||||
COPY sources.json /app/
|
||||
|
||||
# Regenerable indexes. CI builds these from corpus/ in the same job
|
||||
# that builds the image. Listed last so code changes don't invalidate
|
||||
# the COPY layer cache for these (much larger) directories.
|
||||
#
|
||||
# bm25/ is only consulted when HYBRID_SEARCH=true (the server falls
|
||||
# back to dense-only if it's missing).
|
||||
COPY corpus /app/corpus
|
||||
COPY chroma /app/chroma
|
||||
COPY bm25 /app/bm25
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PRODUCT_NAME=crop_seed \
|
||||
MCP_TRANSPORT=streamable-http \
|
||||
MCP_HOST=0.0.0.0 \
|
||||
MCP_PORT=8000 \
|
||||
HYBRID_SEARCH=true \
|
||||
OLLAMA_URL=http://ollama:11434 \
|
||||
RERANK_URL=http://llama-rerank:8080
|
||||
# Defaults above assume the MCP container shares a Docker network
|
||||
# with services named `ollama` and `llama-rerank`. Override either
|
||||
# in the compose `environment:` block if your stack uses different
|
||||
# service names or if you want to point at off-stack hosts.
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
ENTRYPOINT ["python", "-m", "docs_mcp.server"]
|
||||
Reference in New Issue
Block a user