Labs · MCP server and API

LotsIntel for
your AI agent.

A tool from our own agent stack. Keep a list of competitors per project, record what changed on their sites and social profiles, and work through a watch queue of signals worth acting on.

https://intel.lotsmcp.com/mcp
API docsOpen LotsIntel
19Tools

Ask your agent, for example.

Once LotsIntel is connected, plain requests like these work.

  • “Add these five competitors to the LotsSocial project.”
  • “What changed on our competitors' pricing pages this week?”
  • “Show me the open signals in the watch queue.”

Connect in two minutes.

Claude

Settings → Connectors → Add custom connector. Paste the URL, connect, and sign in with your Lots account.

ChatGPT

Settings → Apps & Connectors → Advanced → turn on Developer mode, then Create a connector with the URL and sign in.

Claude Code

claude mcp add --transport http lots-intel https://intel.lotsmcp.com/mcp

Codex

codex mcp add lots-intel --url https://intel.lotsmcp.com/mcp

Cursor, Windsurf and others

{
  "mcpServers": {
    "lots-intel": {
      "url": "https://intel.lotsmcp.com/mcp"
    }
  }
}

Cloud agents without MCP

Give the agent https://intel.lotsmcp.com/docs.md and an API key from lotstech.com/api. It calls the REST API with Authorization: Bearer <key>.

Every server uses OAuth: your agent acts as you, inside your own roles and workspaces. You can disconnect it at any time from the app.

19 tools, also REST endpoints.

Each tool is available over MCP and as a REST endpoint under https://intel.lotsmcp.com/api/v1/lotsintel.

Add competitor

POST /projects/:project_id/competitors

Add one competitor, or update the existing row when the domain is already in this project. Optional surfaces can be included. The same domain is never inserted twice.

Archive competitor

DELETE /projects/:project_id/competitors/:competitor_id

Take a competitor off the watch. History stays. A later import or restore_competitor puts them back.

Create intel project

POST /projects

Create the product or project to watch, or return the existing project when this owner already used that name. A repeat does not overwrite the saved description or destinations.

Dismiss signal

POST /projects/:project_id/signals/:signal_id/dismiss

Keep a signal and do not send it. A sent signal cannot be dismissed.

Get competitor

GET /projects/:project_id/competitors/:competitor_id

Get one competitor, the active pages and accounts being watched, the latest observation on each, and signals that have not been sent.

Get intel project

GET /projects/:project_id

Get one project plus counts of active competitors, competitors due for a check, and unsent signals.

Get watch queue

GET /projects/:project_id/watch-queue

Start every check run here. Returns unsent signals first, then at most 3 due competitors. Each competitor includes its surfaces and the latest observation, or needs_surfaces when nothing is being watched yet.

Import competitors

POST /projects/:project_id/competitors/import

Add or update up to 50 competitors in one call. Match is the domain. An archived domain is brought back when it is imported again. Each row reports created, updated, or rejected. Pass surfaces on a row to set what to watch; omit surfaces to leave existing pages and accounts untouched.

List competitors

GET /projects/:project_id/competitors

List competitors in a project. Filter with status (proposed, active, paused, archived), kind, or due=true. Archived competitors are omitted unless status=archived.

List intel projects

GET /projects

List the products this owner is watching.

List signals

GET /projects/:project_id/signals

List signals for a project. status is unsent, sent, or dismissed. unsent means recorded and not yet delivered.

Record observation

POST /projects/:project_id/observations

Save what was seen on one surface. The first observation for that surface is a baseline and cannot by itself justify a signal. The same content is stored once and still counts as a completed check. Only active competitors can be checked.

Record signal

POST /projects/:project_id/signals

Record a competitive change. Pass observation ids from this competitor. At least one must be a later observation rather than a baseline. This does not send the signal.

Refresh social surface

POST /projects/:project_id/surfaces/:surface_id/refresh

Read one saved social account through the existing research provider, store the observation, and dedupe posts by URL. The project can spend 20 provider calls per day. The first snapshot is a baseline. A repeat of the same feed does not create another observation.

Restore competitor

POST /projects/:project_id/competitors/:competitor_id/restore

Put an archived competitor back on the watch as active and due.

Send signal

POST /projects/:project_id/signals/:signal_id/send

Deliver one signal once to the project email addresses and optional webhook. A second call returns the original delivery and does not send again. Fails with NO_DESTINATIONS when the project has nowhere to send. A partial failure stays unsent so only the failed destinations are retried.

Set watch surfaces

PUT /projects/:project_id/competitors/:competitor_id/surfaces

Replace the pages and social accounts watched for one competitor. Social platforms are twitter (use this for X), instagram, linkedin, linkedin_page, and threads. A homepage, pricing page, changelog, or blog needs a public url.

Update competitor

PATCH /projects/:project_id/competitors/:competitor_id

Change kind, priority, interval, website, status, or notes. Status here is proposed, active, or paused. Removing someone from the watch is archive_competitor.

Update intel project

PATCH /projects/:project_id

Change the project name, website, description, or signal destinations. Destinations.emails receives signals. webhook_url, when set, must be https and is posted the same JSON.

Questions, answered.

What is the LotsIntel MCP server URL?

https://intel.lotsmcp.com/mcp. Add it as a remote MCP server (custom connector) in your AI agent and sign in with your Lots account.

Which agents work with LotsIntel?

Claude, ChatGPT (developer mode), Claude Code, Codex, Cursor, Windsurf and any other client that supports remote MCP with OAuth. Agents without MCP use the REST API with an API key.

Where are the LotsIntel API docs?

https://intel.lotsmcp.com/docs.md: Markdown written so an AI agent can read it. Requests go to https://intel.lotsmcp.com/api/v1/lotsintel with Authorization: Bearer <your key>.

How do I get a LotsIntel API key?

Use Generate key on this page or at lotstech.com/api. Sign in with your LotsTech account, name the key and copy it once. You can revoke it there at any time.

Does MCP or API access cost extra?

No. It is included with LotsIntel. You pay only for LotsIntel's own plan or usage, and your AI provider bills its own usage.

All MCP servers · All APIs and keys