Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "context-dev",
"displayName": "Context.dev",
"version": "2.1.0",
"version": "2.2.0",
"description": "Search, scrape, crawl, extract, parse, monitor, and process the live web with Context.dev.",
"author": {
"name": "Context.dev",
Expand Down
21 changes: 11 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Context.dev for Cursor

The official [Context.dev](https://context.dev) plugin for Cursor. Give Cursor reliable access to the live web: search, scraping, crawling, structured extraction, document parsing, brand intelligence, screenshots, recurring monitors, and large asynchronous batches.
The official [Context.dev](https://context.dev) plugin for Cursor. Give Cursor reliable access to the live web: search, company news, scraping, crawling, structured extraction, document parsing, brand intelligence, screenshots, recurring monitors, and large asynchronous batches.

## Install and connect

Expand Down Expand Up @@ -34,7 +34,7 @@ Cursor automatically selects the appropriate Context.dev tool. Tool calls requir

| Component | What it provides |
| --- | --- |
| MCP server | The production Context.dev MCP with 34 direct, typed tools and OAuth |
| MCP server | The production Context.dev MCP with 40 direct, typed tools and OAuth |
| Skills | Focused MCP workflows, direct API guidance, Cursor connection help, and Logo Link integration |
| Commands | `/brand-colors`, `/scrape-url`, `/search-web`, and `/extract-web-data` |
| Rules | Routes live-web tasks to the right Context.dev tool and keeps credentials out of client code |
Expand All @@ -44,9 +44,9 @@ Cursor automatically selects the appropriate Context.dev tool. Tool calls requir
| Skill | When Cursor uses it |
| --- | --- |
| `context-search` | Live web research and source discovery |
| `context-scrape` | Markdown, HTML, images, or screenshots from one known URL |
| `context-crawl` | Sitemap discovery and focused multi-page crawling |
| `context-extract` | Schema-shaped JSON from websites |
| `context-scrape` | Markdown, HTML, images, screenshots, or structured JSON from one known URL |
| `context-crawl` | URL discovery and focused multi-page crawling |
| `context-extract` | Schema-shaped JSON from a known webpage |
| `context-parse` | PDFs, Office files, images, and other local document bytes |
| `context-brand` | Brand profiles, design systems, fonts, and industry codes |
| `context-monitor` | Recurring website-change detection and history |
Expand All @@ -60,13 +60,14 @@ Cursor automatically selects the appropriate Context.dev tool. Tool calls requir
| Group | Tools |
| --- | --- |
| Parse | `parse-document` |
| Scrape and crawl | `web-scrape-html`, `web-scrape-markdown`, `web-scrape-images`, `web-scrape-sitemap`, `web-crawl`, `web-screenshot` |
| Extract and search | `web-extract`, `web-search`, `web-naics`, `web-sic` |
| Brand and design | `get-brand`, `brand-retrieve-unified`, `web-styleguide`, `web-fonts` |
| Web | `web-scrape`, `web-map`, `web-crawl`, `web-search`, `web-answers` |
| Company and people | `get-news-search`, `get-brand`, `brand-retrieve-unified`, `brand-search`, `people-enrich`, `web-styleguide` |
| Batches | `submit-batch`, `list-batches`, `get-batch`, `get-batch-results`, `cancel-batch`, `delete-batch` |
| Monitors | `create-monitor`, `list-monitors`, `get-monitor`, `update-monitor`, `delete-monitor`, `run-monitor-now`, `list-monitor-runs`, `get-monitor-run`, `list-monitor-changes`, `list-account-runs`, `list-monitor-credit-usage`, `list-changes`, `get-change` |
| Monitors | `create-monitor`, `list-monitors`, `get-monitor`, `update-monitor`, `delete-monitor`, `get-monitor-limits`, `list-monitor-credit-usage`, `run-monitor-now`, `list-monitor-runs`, `get-monitor-run`, `list-account-runs`, `list-monitor-changes`, `get-change`, `list-changes`, `rotate-monitor-webhook-secret` |
| Webhooks | `list-webhook-deliveries`, `get-webhook-delivery`, `list-webhook-delivery-attempts`, `retry-webhook-delivery` |
| Account and feedback | `list-logs`, `get-log`, `submit-feedback` |

For a known page, use `web-scrape-markdown`. Use `web-search` when the URL is unknown, `web-crawl` for a focused multi-page request, and `submit-batch` for up to 25,000 URLs or a large asynchronous crawl.
For a known page, use `web-scrape` with `formats: { markdown: true }`. Use `web-search` when the URL is unknown, `web-crawl` for a focused multi-page request, and `submit-batch` for up to 25,000 URLs or a large asynchronous crawl.

## Building with the Context.dev API

Expand Down
2 changes: 1 addition & 1 deletion commands/extract-web-data.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ description: Extract structured JSON from a website with Context.dev using a cle
1. Obtain the starting URL and the exact fields the user needs.
2. Build the smallest JSON Schema that represents those fields. Mark only genuinely required fields as required and describe ambiguous fields.
3. Confirm the `context` MCP server is enabled and authenticated. If authentication is required, use the `connect-context-dev` skill.
4. Call `web-extract` with the URL, schema, and concise instructions. Enable fact checking when every value must be stated on the source pages.
4. Call `web-scrape` with the URL, `formats: { json: true }`, and the schema in `jsonParams.schema`.
5. Return the structured result without silently filling missing fields. Explain unsupported or empty values plainly.
2 changes: 1 addition & 1 deletion commands/scrape-url.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ description: Scrape a URL to markdown via Context.dev MCP for live page content

1. Obtain the full **URL** from the user (must include scheme, e.g. `https://example.com/docs`).
2. Confirm the `context` MCP server is enabled and authenticated. If authentication is required, use the `connect-context-dev` skill.
3. Call `web-scrape-markdown` with the URL.
3. Call `web-scrape` with the URL and `formats: { markdown: true }`.
4. Return the relevant Markdown or answer the user's question from it. Preserve source links when useful.
5. Do not fabricate page content. If the scrape fails, report the actual error and suggest a narrower selector, a longer timeout, or a retry only when appropriate.
13 changes: 7 additions & 6 deletions rules/prefer-context-dev-mcp.mdc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
description: Use the Context.dev MCP for live web search, scraping, extraction, parsing, brand data, monitoring, and batches
description: Use the Context.dev MCP for live web search, company news, scraping, extraction, parsing, brand data, monitoring, and batches
alwaysApply: false
---

Expand All @@ -8,13 +8,14 @@ Use the `context` MCP server instead of memory when the user needs current publi
Choose the narrowest direct tool:

- Unknown source or current topic: `web-search`
- One known page: `web-scrape-markdown`; raw DOM only: `web-scrape-html`
- Several linked pages: `web-crawl`; URL inventory: `web-scrape-sitemap`
- Typed fields from a site: `web-extract`
- News about one company by name, domain, ticker, or ISIN: `get-news-search`
- One known page: `web-scrape`; set only the needed `formats` fields
- Several linked pages: `web-crawl`; URL inventory: `web-map`
- Typed fields from a known page: `web-scrape` with `formats: { json: true }` and `jsonParams.schema`
- Sourced JSON research when the URL is unknown: `web-answers`
- A local file: `parse-document`
- Visual brand profile by domain: `get-brand`; raw or non-domain brand lookup: `brand-retrieve-unified`
- Design system, fonts, or rendered page: `web-styleguide`, `web-fonts`, or `web-screenshot`
- Industry classification: `web-naics` or `web-sic`
- Design system and fonts: `web-styleguide`; rendered page: `web-scrape` with `formats: { screenshot: true }`
- Large asynchronous work: `submit-batch`, then `get-batch` and `get-batch-results`
- Recurring change detection: the monitor tools

Expand Down
19 changes: 11 additions & 8 deletions scripts/validate-plugin.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const staleInstructionPatterns = [
["retired code-mode search tool", /\bsearch_docs\b/],
["retired code-mode SDK execution", /client\.(?:brand\.retrieveSimplified|web\.webScrapeMd)/],
["retired MCP API-key header", /x-context-dev-api-key/i],
["retired MCP tool name", /\b(?:web-scrape-html|web-scrape-markdown|web-scrape-images|web-scrape-sitemap|web-screenshot|web-extract|web-fonts|web-naics|web-sic)\b/],
];

function addError(message) {
Expand Down Expand Up @@ -249,7 +250,9 @@ async function validateInstructionsAreCurrent() {
"README.md",
...((await walkFiles(path.join(repoRoot, "commands"))).map((file) => path.relative(repoRoot, file))),
...((await walkFiles(path.join(repoRoot, "rules"))).map((file) => path.relative(repoRoot, file))),
"skills/connect-context-dev/SKILL.md",
...((await walkFiles(path.join(repoRoot, "skills")))
.filter((file) => path.basename(file) === "SKILL.md" && !file.endsWith(path.join("context-dev", "SKILL.md")))
.map((file) => path.relative(repoRoot, file))),
];

for (const relativeFile of files) {
Expand All @@ -263,9 +266,9 @@ async function validateInstructionsAreCurrent() {

const commandToolRequirements = new Map([
["commands/brand-colors.md", "get-brand"],
["commands/scrape-url.md", "web-scrape-markdown"],
["commands/scrape-url.md", "web-scrape"],
["commands/search-web.md", "web-search"],
["commands/extract-web-data.md", "web-extract"],
["commands/extract-web-data.md", "web-scrape"],
]);
for (const [relativeFile, toolName] of commandToolRequirements) {
const content = await fs.readFile(path.join(repoRoot, relativeFile), "utf8");
Expand All @@ -275,12 +278,12 @@ async function validateInstructionsAreCurrent() {
}

const skillToolRequirements = new Map([
["skills/context-search/SKILL.md", ["web-search"]],
["skills/context-scrape/SKILL.md", ["web-scrape-markdown", "web-scrape-html", "web-scrape-images", "web-screenshot"]],
["skills/context-crawl/SKILL.md", ["web-scrape-sitemap", "web-crawl"]],
["skills/context-extract/SKILL.md", ["web-extract"]],
["skills/context-search/SKILL.md", ["web-search", "get-news-search", "web-scrape"]],
["skills/context-scrape/SKILL.md", ["web-scrape"]],
["skills/context-crawl/SKILL.md", ["web-map", "web-crawl", "web-scrape"]],
["skills/context-extract/SKILL.md", ["web-scrape", "web-map"]],
["skills/context-parse/SKILL.md", ["parse-document"]],
["skills/context-brand/SKILL.md", ["get-brand", "brand-retrieve-unified", "web-styleguide", "web-fonts", "web-naics", "web-sic"]],
["skills/context-brand/SKILL.md", ["get-brand", "brand-retrieve-unified", "brand-search", "web-styleguide", "people-enrich"]],
["skills/context-monitor/SKILL.md", ["create-monitor", "update-monitor", "delete-monitor", "run-monitor-now"]],
["skills/context-batches/SKILL.md", ["submit-batch", "get-batch", "get-batch-results", "cancel-batch", "delete-batch"]],
]);
Expand Down
2 changes: 1 addition & 1 deletion skills/connect-context-dev/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Use a read-only request:
Use Context.dev to scrape https://www.context.dev and return the page title.
```

The agent should call `web-scrape-markdown`. A successful tool call confirms both the MCP connection and the authenticated Context account.
The agent should call `web-scrape` with `formats: { markdown: true }`. A successful tool call confirms both the MCP connection and the authenticated Context account.

## Troubleshooting

Expand Down
5 changes: 2 additions & 3 deletions skills/context-brand/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,9 @@ Choose the Context.dev MCP tool by output and identifier:
| --- | --- |
| Visual brand profile for a domain | `get-brand` |
| Raw structured brand data or a non-domain lookup | `brand-retrieve-unified` |
| Lightweight company-name or domain search | `brand-search` |
| Website design system and component styling | `web-styleguide` |
| Website font inventory | `web-fonts` |
| NAICS classification | `web-naics` |
| SIC classification | `web-sic` |
| Person enrichment from identity clues | `people-enrich` |

## Workflow

Expand Down
6 changes: 3 additions & 3 deletions skills/context-crawl/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ description: Discover or read multiple pages from a website with Context.dev. Us

Choose between URL discovery and content collection:

- Use `web-scrape-sitemap` to discover and rank URLs without reading every page.
- Use `web-map` to discover and filter URLs without reading every page.
- Use `web-crawl` to retrieve content from a bounded set of linked pages.

## Workflow

1. Confirm the target domain or starting URL and the section the user cares about.
2. Use sitemap search when the user wants particular pages rather than the whole site.
2. Use map search when the user wants particular pages rather than the whole site.
3. Apply path, subdomain, and link limits that match the request.
4. Keep synchronous crawls focused; do not expand scope beyond the requested site or section.
5. Return page URLs alongside the relevant content so results remain traceable.

Use `web-scrape-markdown` for one known page. For a large crawl or thousands of URLs, use `submit-batch` instead of forcing the work through a synchronous crawl.
Use `web-scrape` with `formats: { markdown: true }` for one known page. For a large crawl or thousands of URLs, use `submit-batch` instead of forcing the work through a synchronous crawl.
Loading
Loading