Skip to content

Add parallel-develop skill for bootstrapping integrations#14

Draft
NormallyGaussian wants to merge 5 commits intomainfrom
mh-parallel-develop-skill
Draft

Add parallel-develop skill for bootstrapping integrations#14
NormallyGaussian wants to merge 5 commits intomainfrom
mh-parallel-develop-skill

Conversation

@NormallyGaussian
Copy link
Copy Markdown
Contributor

Summary

Adds a new user-invocable skill parallel-develop that helps an agent bootstrap a Parallel API integration in the user's codebase — mirroring the experience of the /onboarding-guest landing page on platform.parallel.ai, but available inside any MCP-compatible agent (Claude Code, Cursor, Codex, etc.).

When a user types /parallel:parallel-develop <intent>, the agent:

  1. Picks the right API (Search / Task / FindAll / Monitor / Extract) from the user's stated use case.
  2. Picks the right client surface (Python / TypeScript / cURL / MCP).
  3. Reads one of four per-client recipe files and writes working code into the user's repo.

What's in the box

File Purpose
skills/parallel-develop/SKILL.md 71 lines — decision table, guardrails, routing to recipes
skills/parallel-develop/references/python.md Full parallel-web SDK recipes (Search, Task, enrichment, FindAll, Extract, Monitor via httpx)
skills/parallel-develop/references/typescript.md Same surface for the TS SDK. Important guardrail: the TS SDK uses snake_case body keys (task_spec, output_schema, json_schema, run_id). Also covers the #private-field tsconfig issue.
skills/parallel-develop/references/curl.md Raw HTTP with correct endpoint versions (v1 / v1beta / v1alpha)
skills/parallel-develop/references/mcp.md Claude Code / Cursor / VS Code / Claude Desktop MCP configs, including the macOS Claude Desktop env/PATH gotchas
.claude-plugin/plugin.json, .claude-plugin/marketplace.json Bumped to 0.3.0
README.md New entry in the Skills table + Examples section

How it relates to existing skills

The existing skills (parallel-web-search, parallel-deep-research, parallel-data-enrichment, parallel-web-extract) are runtime — they invoke parallel-cli to get work done right now.

parallel-develop is for the build-and-ship case — when the user is adding Parallel to their own codebase and wants starter code they can commit. The SKILL.md body explicitly disambiguates between the two.

How this was validated

  • Audited against docs.parallel.ai — verified every endpoint path, SDK method surface, processor/generator enum, and MCP URL.
  • Evaluated with isolated subagents — two end-to-end dry runs (TypeScript research agent + Python enrichment) in which the agent had access only to the skill bundle and had to produce code that compiles / passes py_compile. Reports used to iterate on recipe clarity.
  • Critical corrections over the status quo: the TypeScript recipe explicitly fixes the camelCase-in-TS mistake (the SDK uses snake_case body keys); the MCP recipe fixes the bogus `@anthropic-ai/parallel-mcp` package reference and documents the Claude Desktop env-inheritance gotcha; the cookbook URL points at the real `parallel-web/parallel-cookbook`.

Test plan

  • Install the plugin locally (`claude --plugin-dir /path/to/parallel-agent-skills`) and run `/parallel:parallel-develop add a research agent to my Next.js app in typescript`.
  • Confirm the agent reads `references/typescript.md` and writes code that type-checks under a reasonable tsconfig.
  • Repeat for Python, cURL, and MCP paths.
  • Confirm `skills-ref validate ./skills/parallel-develop` passes.

Mirrors the /onboarding-guest landing-page experience as a user-invocable
skill: when a user says "integrate Parallel" / "add Parallel to my app",
the agent picks the matching API (Search / Task / FindAll / Monitor /
Extract) and client (Python / TypeScript / cURL / MCP), then emits install
+ env + a working code example with best-practice comments inline.

Structure (progressive disclosure per the Agent Skills spec):
- SKILL.md (71 lines): decision table, guardrails, and routing to a
  per-client recipe file.
- references/python.md: client.search, client.task_run (research +
  enrichment), client.beta.findall, client.extract, and an httpx
  fallback for the alpha Monitor API.
- references/typescript.md: same surface, with explicit guardrails that
  the TS SDK uses snake_case body fields (task_spec, output_schema,
  run_id) and a tsconfig note for the private-field lib-check issue.
- references/curl.md: raw HTTP equivalents with the correct endpoint
  versions (v1, v1beta, v1alpha).
- references/mcp.md: Claude Code / Cursor / VS Code / Claude Desktop
  configs for the hosted Search + Task MCP servers, including the
  macOS Claude Desktop gotchas (env inheritance, npx PATH, relaunch).

Complements, rather than replaces, the existing runtime skills
(parallel-web-search, parallel-deep-research, parallel-data-enrichment,
parallel-web-extract): those invoke parallel-cli to get work done now;
this one writes code the user will ship.

Bumps plugin + marketplace version to 0.3.0.
Follow-up from eval feedback:
- Python recipe now pins 'parallel-web>=0.5,<1.0' (both evals hit install
  friction without a pin).
- TS recipe pins 'parallel-web@^0.4' with a response-shape cheat-sheet.
- Python recipe documents how to import APIError/RateLimitError and the
  optional TaskSpecParam/JsonSchemaParam TypedDicts for strict pyright.
- Documents result.output.content shape (flagged as a guess by both evals).
- Adds a Task Group batch-enrichment snippet for the 50+ row case.
The hosted Search MCP is launching at search.parallel.ai/mcp rather than
search-mcp.parallel.ai/mcp. Updated all references in the MCP recipe:
remote URL configs for Cursor / VS Code / Claude Desktop, the Claude Code
CLI install commands, and the programmatic Bearer-token example.
Pulled concrete, often counterintuitive guidance from the dedicated docs
pages into the SKILL.md guardrails and the per-language recipes, with
deep-dive links in each API section rather than paraphrasing.

Highlights:
- Task output schemas: every property must be in 'required', use
  {type: ['string','null']} union for optional fields, always set
  additionalProperties: false, root must be type: object.
- FindAll: if you get 0 matches, UPGRADE the generator before rewriting
  the query — issue is usually pool size, not query quality. Match
  generator to expected volume (base/core/pro guidance).
- Search / Extract: session_id groups related calls, client_model
  enables server-side optimization for the consuming LLM. Expose only
  objective + search_queries as LLM tool params.
- Extract: warning that full_content without objective is redundant.
- Added a 'Canonical best-practice pages' block in SKILL.md linking to
  Search/Extract/Task/FindAll/MCP best-practice docs.
Most MCP clients (Claude Code, Claude Desktop Connectors UI, Cursor,
VS Code, Windsurf, Cline) just need the URL — OAuth handles auth on
first use. Previous recipe led with the mcp-remote stdio bridge +
inline API key + Claude Desktop shell-env gotchas, which only apply to
older clients without remote-HTTP support.

Now:
- URL-first, one config block per client, tiny snippets
- mcp-remote bridge demoted to a 'Stdio fallback' section at the bottom
- Per-client quirks captured in one line each (Windsurf uses serverUrl,
  Cline needs type=streamableHttp, VS Code wraps in mcp.servers)
- Points at docs.parallel.ai/integrations/mcp/search-mcp for any client
  not listed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant