# CompanyCam — how to use (mcp.ai)

Connect your CompanyCam account and use 24 tools for project management straight from your AI agent. Connect with your own API key. CompanyCam is a photo-first jobsite management platform for documenting projects, coordinating teams, and sharing project updates.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_companycam?ms=1787296080000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `companycam_add_comment`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/companycam`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/companycam/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/companycam/add/comment` — Add a comment to either a CompanyCam project or photo.
  - body: { content: string, target_id: string, target_type: string }
- `POST https://api.mcp.ai/api/companycam/add/photo/tags` — Attach media tags by display name. CompanyCam reuses matching media tags and creates reusable media tags for names that do not exist.
  - body: { photo_id: string, tag_names: string[] }
- `POST https://api.mcp.ai/api/companycam/add/project/labels` — Attach project labels by display name. CompanyCam reuses matching global labels and creates reusable global labels for names that do not exist.
  - body: { project_id: string, label_names: string[] }
- `POST https://api.mcp.ai/api/companycam/add/project/photo/from/url` — Add a photo to a CompanyCam project by having CompanyCam fetch a publicly reachable HTTPS image URL.
  - body: { photo_url: string, tag_names?: string[], project_id: string, captured_at?: integer, coordinates?: object, description?: string }
- `POST https://api.mcp.ai/api/companycam/create/customer` — Create a CompanyCam customer with optional contact details, company status, notes, address, and initial contacts.
  - body: { name: string, email?: string, notes?: string, address?: object, contacts?: object[], is_company?: boolean, phone_number?: string }
- `POST https://api.mcp.ai/api/companycam/create/project` — Create a CompanyCam project with its required address and optional contact, customer, location, and template details.
  - body: { city: string, name: string, state: string, country: string, geofence?: object[], coordinates?: object, customer_id?: string, postal_code: string, primary_contact?: object, street_address_1: string, project_template_id?: string }
- `POST https://api.mcp.ai/api/companycam/create/project/task` — Create a task on a CompanyCam project with task details and optional assignees.
  - body: { details: string, project_id: string, assignee_ids?: string[] }
- `POST https://api.mcp.ai/api/companycam/create/tag` — Create a reusable CompanyCam media tag for organizing photos.
  - body: { display_value: string }
- `POST https://api.mcp.ai/api/companycam/get/account/context` — Return the connected CompanyCam user and company so an agent can identify the account, role, and company before acting.
- `POST https://api.mcp.ai/api/companycam/get/photo` — Get one CompanyCam photo by ID.
  - body: { photo_id: string }
- `POST https://api.mcp.ai/api/companycam/get/project` — Get one CompanyCam project by ID.
  - body: { project_id: string }
- `POST https://api.mcp.ai/api/companycam/list/comments` — List comments attached to either a CompanyCam project or photo.
  - body: { target_id: string, target_type: string }
- `POST https://api.mcp.ai/api/companycam/list/customers` — List or search CompanyCam customers by name or contact text.
  - body: { query?: string }
- `POST https://api.mcp.ai/api/companycam/list/labels` — List reusable CompanyCam project labels that can be attached to projects.
  - body: { limit?: integer, cursor?: string }
- `POST https://api.mcp.ai/api/companycam/list/project/photos` — List and filter photos in a CompanyCam project by tags, users, or groups, one cursor page at a time.
  - body: { limit?: integer, cursor?: string, tag_ids?: string[], user_ids?: string[], group_ids?: string[], project_id: string }
- `POST https://api.mcp.ai/api/companycam/list/project/tasks` — List tasks for a CompanyCam project, including status, completion, assignees, and attached media.
  - body: { project_id: string }
- `POST https://api.mcp.ai/api/companycam/list/projects` — List projects with optional lifecycle and assigned-user filters, one cursor page at a time.
  - body: { limit?: integer, cursor?: string, archived?: boolean, include_total?: boolean, assigned_user_ids?: string[] }
- `POST https://api.mcp.ai/api/companycam/list/tags` — List reusable CompanyCam media tags and return an opaque cursor for the next page.
  - body: { limit?: integer, cursor?: string }
- `POST https://api.mcp.ai/api/companycam/list/users` — List CompanyCam users available for task assignment and project workflows.
  - body: { limit?: integer, cursor?: string }
- `POST https://api.mcp.ai/api/companycam/search/projects` — Search CompanyCam projects by a free-text query when project list filters are insufficient.
  - body: { query: string }
- `POST https://api.mcp.ai/api/companycam/set/photo/description` — Create or replace the description attached to a CompanyCam photo. Setting a description replaces the photo's existing description rather than appending to it.
  - body: { content: string, photo_id: string }
- `POST https://api.mcp.ai/api/companycam/update/customer` — Update the name, notes, city, or postal code of an existing CompanyCam customer.
  - body: { name?: string, notes?: string, address?: object, customer_id: string }
- `POST https://api.mcp.ai/api/companycam/update/project` — Update editable project identity, address, or primary-contact fields without changing archive state.
  - body: { city?: string, name?: string, state?: string, project_id: string, primary_contact?: object, street_address_1?: string }
- `POST https://api.mcp.ai/api/companycam/update/project/task` — Update a CompanyCam project task's details or add and retain assignees. This tool cannot remove existing assignees because removal requires provider-specific assignee-removal records that this tool do
  - body: { details?: string, task_id: string, project_id: string, assignee_ids?: string[] }

## Example prompts
- "What can I do in CompanyCam?"
- "Show me a summary of my CompanyCam account"

## More
- Page: https://mcp.ai/companycam
- Agent spec (llms.txt): https://mcp.ai/companycam/llms.txt
- Postman collection: https://mcp.ai/companycam/postman.json
