business-card-watchdog
Business Card Watchdog is an installable, user-scoped service for processing large batches of business card images from watched folders. It exposes CLI, API, MCP, and watched-folder surfaces for deterministic orchestration and routing to Google Contacts or Odoo.
README
Business Card Watchdog
Business Card Watchdog is an installable, user-scoped service for processing large batches of business card images from watched folders, including SyncThing phone-camera directories.
The design builds on the local business-card-to-contact skill:
- OCR and normalize each card into reviewed contact JSON.
- Generate candidate contact photos.
- Route processed card data and image artifacts to Google Contacts and/or Odoo/Odollo tenants.
- Use deterministic App Intelligence style orchestration for large batches: host-owned state, ledgers, approvals, replay logs, and explicit sink policies.
- Expose CLI, API, MCP, and watched-folder surfaces from one shared core.
Install
From this repo, use uv:
uv venv .venv
uv pip install --python .venv/bin/python -e ".[api,watch,vision,dev]"
Run commands through the venv:
.venv/bin/bcw status --json
For deterministic rectangle/contour hints in the image prefilter, include the vision extra:
uv pip install --python .venv/bin/python -e ".[vision]"
User Config
Config lives under the user scope:
~/.config/business-card-watchdog/config.toml
~/.local/share/business-card-watchdog/
~/.cache/business-card-watchdog/
Create an editable starter config:
.venv/bin/bcw init-config
The SyncThing source can be configured as a normal path or an alias such as:
[paths]
sync_phone = "/mnt/e/SyncThing/Phone Camera"
[watch]
inputs = ["$fsr:sync_phone"]
First Commands
Dry-run a batch:
.venv/bin/bcw process "/mnt/e/SyncThing/Phone Camera" --dry-run
Start polling watch mode:
.venv/bin/bcw watch --once
Serve the API, if fastapi and uvicorn are installed:
.venv/bin/bcw api --host 127.0.0.1 --port 8787
Print the MCP tool manifest:
.venv/bin/bcw mcp-manifest
Inspect runs, jobs, review queue, sinks, and watcher state:
.venv/bin/bcw runs list
.venv/bin/bcw runs summary <run-id>
.venv/bin/bcw runs phase-report <run-id>
.venv/bin/bcw sinks lookup-readiness <job-id> --run-id <run-id> --sink google_contacts --json
.venv/bin/bcw jobs list --run-id <run-id>
.venv/bin/bcw jobs show <job-id> --run-id <run-id>
.venv/bin/bcw reviews list --run-id <run-id>
.venv/bin/bcw sinks check --json
.venv/bin/bcw watch-status --json
Add --json to run, job, and review commands when consuming them from automation.
Operator-Selected Live Pilots
Live lookup, write, and readback are not part of generic continuation or broad batch automation. Use one explicit run_id, job_id, sink, operator, and scope at a time, starting with non-sensitive test card data.
Review the selected target gates before any non-simulated sink call:
.venv/bin/bcw live-selection-requirements --run-id <run-id> --sink google_contacts --no-write
.venv/bin/bcw sinks live-selection-packet <job-id> --run-id <run-id> --sink google_contacts --operator <operator> --scope lookup
.venv/bin/bcw sinks select-live-target <job-id> --run-id <run-id> --sink google_contacts --operator <operator> --scope lookup --safety-confirmation "<operator confirms intended tenant/profile>" --json
.venv/bin/bcw sinks selected-target-audit <job-id> --run-id <run-id> --scope lookup --no-write
.venv/bin/bcw runs live-pilot-status <run-id> --no-write
Use --sink odoo for Odollo/Odoo targets. Start with live-selection-requirements when you need the exact candidate-specific packet and approval commands. If the selection packet reports that replacement requires abandonment, run sinks abandon-live-pilot for the current target before selecting a replacement. Use docs/operations/live-pilot-checklists.md for the full lookup, write, readback, and closeout procedure.
Install a user-scope systemd unit file without enabling or starting it:
.venv/bin/bcw service install --json
systemctl --user daemon-reload
systemctl --user enable business-card-watchdog.service
systemctl --user start business-card-watchdog.service
Remove the generated unit file:
.venv/bin/bcw service uninstall --json
systemctl --user daemon-reload
The service commands write only under the user config directory, normally:
~/.config/systemd/user/business-card-watchdog.service
Current State
This is an initial scaffold. It has deterministic run ledgers, config loading, routing decisions, CLI/API/MCP surfaces, and a subprocess adapter for the existing business-card-to-contact skill. External writes are intentionally explicit and dry-run first.
Operational details live in:
docs/operations/user-scope-install-and-service.mddocs/operations/review-workflow.mddocs/operations/review-workflow-sample-output.mddocs/operations/public-upstream-validation.mddocs/operations/live-pilot-checklists.mddocs/operations/release-readiness.md
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.