You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 7458bb9
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,13 +8,13 @@ Contractor Foreman has no public API and no official MCP server. This repo gives
8
8
9
9
-**MCP server** for Claude Code, Claude Desktop, Cursor, Codex and any MCP client, over stdio or HTTP. [Setup](#mcp-server)
10
10
-**REST API** on `http://127.0.0.1:8787/api/v1/contractor-foreman`, with OpenAPI docs at `/docs`. [Setup](#rest-api)
11
-
-**Python**: `call("list_projects", search="Oak St")`, plus 10 ready scripts in [`examples/`](examples/).
11
+
-**Python**: `call("list_projects", search="Oak St")`, plus 10 ready scripts in [`examples/`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/).
12
12
13
13
It is for technical people who want to run it themselves, **for noncommercial use only** ([license](#license)). If you want it running 24/7 on a server, kept working when Contractor Foreman changes its app, for a team or a business, use the [hosted version at cotlet.dev](https://cotlet.dev/integrations/contractor-foreman-api-mcp-server).
With [uv](https://docs.astral.sh/uv/): `uv venv && uv pip install -e .`, then `uv run contractor-foreman-mcp ...`.
78
78
79
-
Setting it up with an AI agent (Claude Code, Codex, Cursor)? Open it in this folder and ask it to set up the repo: [`AGENTS.md`](AGENTS.md) tells it every step, and it asks you only for the steps in Chrome.
79
+
Setting it up with an AI agent (Claude Code, Codex, Cursor)? Open it in this folder and ask it to set up the repo: [`AGENTS.md`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/AGENTS.md) tells it every step, and it asks you only for the steps in Chrome.
80
80
81
81
To update: `git pull && pip install -e .`. We copy every change of the hosted Contractor Foreman tools into this repo.
82
82
@@ -167,7 +167,7 @@ claude mcp add contractor-foreman -- /path/to/contractor-foreman-api-mcp-server/
167
167
168
168
### Cursor
169
169
170
-
`~/.cursor/mcp.json`, the same block as Claude Desktop. A ready copy is in [`mcp.json`](mcp.json).
170
+
`~/.cursor/mcp.json`, the same block as Claude Desktop. A ready copy is in [`mcp.json`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/mcp.json).
Or one tool from the shell: `contractor-foreman-mcp call list_invoices unpaid_only=true limit=10`, or with a JSON object.
249
249
250
-
Ready scripts in [`examples/`](examples/). Each prints JSON or a short report, takes `--out file.csv` or `--out file.json` where it makes sense, and `--help`:
250
+
Ready scripts in [`examples/`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/). Each prints JSON or a short report, takes `--out file.csv` or `--out file.json` where it makes sense, and `--help`:
251
251
252
252
| Script | What it does |
253
253
|---|---|
254
-
|[`export_projects.py`](examples/export_projects.py)| Projects to CSV or JSON: customer, stage, dates, contract amount, costs, percent complete. `--status`, `--search`. |
255
-
|[`add_daily_log.py`](examples/add_daily_log.py)| A daily log from a site note, crews and deliveries, after checking the day has no log yet. `--dry-run`. |
256
-
|[`create_estimate.py`](examples/create_estimate.py)| An estimate from a scope list in CSV with markup. Prints the total, `--send` emails the PDF. |
257
-
|[`create_change_order.py`](examples/create_change_order.py)| A change order or change order request from a client request; `--send` emails a saved one. |
258
-
|[`reschedule_task.py`](examples/reschedule_task.py)| Moves a schedule task by N days and every task that depends on it. `--dry-run`. |
259
-
|[`over_budget_projects.py`](examples/over_budget_projects.py)| Cost codes of open projects whose actual cost runs past the estimate, biggest overrun first. |
260
-
|[`overdue_invoices.py`](examples/overdue_invoices.py)| Past-due invoices with a balance, oldest first, with days overdue and the total outstanding. |
261
-
|[`record_payment.py`](examples/record_payment.py)| Records a check or transfer against an invoice found by its number, prints the new balance. |
262
-
|[`crew_hours.py`](examples/crew_hours.py)| Hours and labor cost per project and employee from time cards, for the last N days or a date range. |
263
-
|[`open_todos.py`](examples/open_todos.py)| Open to-dos due in the next N days or already late, by project. |
254
+
|[`export_projects.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/export_projects.py)| Projects to CSV or JSON: customer, stage, dates, contract amount, costs, percent complete. `--status`, `--search`. |
255
+
|[`add_daily_log.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/add_daily_log.py)| A daily log from a site note, crews and deliveries, after checking the day has no log yet. `--dry-run`. |
256
+
|[`create_estimate.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/create_estimate.py)| An estimate from a scope list in CSV with markup. Prints the total, `--send` emails the PDF. |
257
+
|[`create_change_order.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/create_change_order.py)| A change order or change order request from a client request; `--send` emails a saved one. |
258
+
|[`reschedule_task.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/reschedule_task.py)| Moves a schedule task by N days and every task that depends on it. `--dry-run`. |
259
+
|[`over_budget_projects.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/over_budget_projects.py)| Cost codes of open projects whose actual cost runs past the estimate, biggest overrun first. |
260
+
|[`overdue_invoices.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/overdue_invoices.py)| Past-due invoices with a balance, oldest first, with days overdue and the total outstanding. |
261
+
|[`record_payment.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/record_payment.py)| Records a check or transfer against an invoice found by its number, prints the new balance. |
262
+
|[`crew_hours.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/crew_hours.py)| Hours and labor cost per project and employee from time cards, for the last N days or a date range. |
263
+
|[`open_todos.py`](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/examples/open_todos.py)| Open to-dos due in the next N days or already late, by project. |
@@ -467,7 +467,7 @@ The source is public, the license is not an open source license: noncommercial u
467
467
468
468
## License
469
469
470
-
[PolyForm Noncommercial License 1.0.0](LICENSE). In short:
470
+
[PolyForm Noncommercial License 1.0.0](https://github.com/cotletdev/contractor-foreman-api-mcp-server/blob/main/LICENSE). In short:
471
471
472
472
-**Allowed:** noncommercial use: you, for your own personal purposes with your own Contractor Foreman account, or a charity, school, public research or government body. Changing the code, and sharing it under the same license.
473
473
-**Not allowed:** any commercial use, your own business included; client work; selling or offering it, or a service built on it.
@@ -478,7 +478,7 @@ The source is public, the license is not an open source license: noncommercial u
0 commit comments