| name | company-research |
| version | 1.1.0 |
| description | Run end-to-end company research through Primr. Use when the user asks to research a company, provides a company URL, or wants a new strategic analysis run. |
| mcp_server | primr |
| tools | ["estimate_run","research_company","check_jobs","wait_for_status_change"] |
| resources | ["primr://research/modes","primr://research/status","primr://output/latest","primr://output/artifacts/by_job/{job_id}","primr://output/qa_summary/by_job/{job_id}","primr://output/usage_summary/by_job/{job_id}","primr://output/source_summary/by_job/{job_id}","primr://output/trace_summary/by_job/{job_id}","primr://output/verification_summary/by_job/{job_id}","primr://output/calibration_summary/by_job/{job_id}"] |
Company Research
Purpose
Use this skill to start and monitor Primr research runs through MCP. Treat MCP as the source of truth for current modes, defaults, and outputs.
Workflow
-
Read primr://research/modes to confirm the current mode guidance.
-
Read primr://research/status to see whether a run is already active.
-
Call estimate_run before starting a new run. Supports platforms (array), strategy_type, and no_ai_strategy parameters. Returns estimated_time_range alongside estimated_time_minutes.
-
Present the estimate, state that the run incurs real API cost, and get explicit approval before calling research_company.
-
After starting a run, monitor with wait_for_status_change or check_jobs until terminal.
-
Read primr://output/artifacts/by_job/{job_id} to inventory completed-job
artifacts without report body content, then read primr://output/latest only
when a report preview is needed to present the result and next actions. Read
primr://output/qa_summary/by_job/{job_id} when QA artifacts are attached and
the user needs QA outcome metadata. Read
primr://output/usage_summary/by_job/{job_id} when the user needs cost,
timing, approval, or artifact-count metadata.
Read primr://output/source_summary/by_job/{job_id} when the user needs
citation/source appendix metadata.
Read primr://output/trace_summary/by_job/{job_id} when the user needs scrape
trace health metadata.
Read primr://output/verification_summary/by_job/{job_id} when the user needs
claim verification trust score, claim counts, status counts, first-party
downgrade counts, or source-reference counts without raw claims, source URLs,
search queries, explanations, or report body content.
Read primr://output/calibration_summary/by_job/{job_id} when the user needs
label-calibration counts, inference source-copy counts, evidence-review count
buckets, judge provenance, or judge-agreement metadata without raw claims,
source URLs, evidence reviews, rationales, or report body content.
MCP resource reads are audit-logged with hashed URI/result values and
normalized resource kind, without raw URI query values or resource bodies.
A2A skill calls are audit-logged with hashed message/result payloads, hashed
caller ids, granted scopes, duration, outcome, and job id when present, without
raw message text, task ids, URLs, report paths, raw results, or caller ids.
Operating Rules
-
Prefer the lightest mode that answers the request.
-
Do not restate fixed pricing or provider defaults from memory. Use MCP resources and estimate_run.
-
If a job is already in progress, surface that state instead of starting a second run.
-
Treat full as the standard end-to-end workflow and premium as the higher-cost, higher-depth option.
-
Expect standard runs to take roughly 35-50 minutes and premium multi-vendor runs to reach 75-120 minutes.
-
Do not hold the client in a synchronous wait for the entire run; launch once, then monitor and resume from job state.
Example
User: Research ExampleCo at https://example.com
1. Read primr://research/modes
2. Read primr://research/status
3. estimate_run(company_url="https://example.com", mode="full")
4. After approval: research_company(company_name="ExampleCo", company_url="https://example.com", mode="full", max_estimated_cost_usd=0.67)
5. wait_for_status_change(job_id="...", timeout_seconds=60)
Error Handling
-
job_in_progress: report the active run and offer to monitor it.
-
invalid_url or ssrf_blocked: ask for a valid public URL or switch to deep if appropriate.
-
rate_limit_exceeded: wait for the retry window and retry.