Attribution Reconciler
aaron-he-zhu/aaron-marketing-skills
A skill your agent uses when platform-reported conversions disagree with GA4/ecommerce, when you suspect Meta and Google are double-counting the same sales, or for a standing (monthly)…
A skill your agent uses whenever the user wants to find, shortlist, vet, enrich, or research US professional-services firms — law, marketing, consulting, accounting, IT services, architecture…
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providers --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .claude/skills/find-service-providers && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .claude/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providersType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providers --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .agents/skills/find-service-providers && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .agents/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providers --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .cursor/skills/find-service-providers && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .cursor/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jeremylongshore/tons-of-skills-marketplace.git --path plugins/mcp/servicegraph/skills/find-service-providers--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providers --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .gemini/skills/find-service-providers && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .gemini/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providersInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .github/skills/find-service-providers && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .github/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace find-service-providers --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/mcp/servicegraph/skills/find-service-providers .opencode/skills/find-service-providers && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "find-service-providers" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/plugins/mcp/servicegraph/skills/find-service-providers into .opencode/skills/find-service-providers/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "find-service-providers", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
find-service-providersA skill your agent uses whenever the user wants to find, shortlist, vet, enrich, or research US professional-services firms — law, marketing, consulting, accounting, IT services, architecture…
Find Service Providers is an agent skill from jeremylongshore/tons-of-skills-marketplace. Use whenever the user wants to find, shortlist, vet, enrich, or research US professional-services firms — law, marketing, consulting, accounting, IT services, architecture, engineering, HR, PR, design, and similar B2B service providers. Triggers on requests like "find me a PPC agency in California", "shortlist three boutique IP law firms", "build a longlist of 50 mid-size IT consultancies", or "here are 12 agency domains — pull contact info and confirm which are US-based", even when the need is described…
Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Claude Code
It sits in Business, Finance & HR, covering Recruiting and HR, Paid advertising and E-commerce operations. It works with Model Context Protocol. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
Bash(curl:*)mcp__servicegraph__list_fieldsmcp__servicegraph__list_field_valuesmcp__servicegraph__check_filtermcp__servicegraph__translate_intentmcp__servicegraph__search_datasetmcp__servicegraph__get_rowmcp__servicegraph__unlock_rowsmcp__servicegraph__get_credit_balanceFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.servicegraph.comcp.servicegraph.coAlso links to:
servicegraph.cogithub.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SERVICEGRAPH_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Designed for Claude Code
From compatibility in the SKILL.md frontmatter.
Find Service Providers loads about 4.7k tokens when it runs. Until then it costs about 260 tokens; SKILL.md has 1,768 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
ICEGRAPH_API_KEY` in the environment or `.env.local` for the REST- **Never** read `.env`, `.env.local`, or any other credential filehe call.** Dispatch via shell, sourcing `.env.local`( set -a; [ -f .env.local ] && . ./.env.local; set +a;> `SERVICEGRAPH_API_KEY=vk_…` to `.env.local` in this directory.or already in `.env.local`, the very first call will succeed and theAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 1,768 words, ~4,657 tokens.
.claude/skills/find-service-providers/SKILL.md (or your agent's skills folder).Drive the ServiceGraph API (https://api.servicegraph.co) to find,
shortlist, and enrich US professional-services firms.
The API hosts several datasets behind a uniform per-dataset URL
shape (/v1/datasets/:id/…). This skill is for the agencies dataset —
dataset id pro_services — which holds 100k+ B2B service firms
classified across 22 industries with multi-tag service taxonomies,
location, size, and third-party rating signals.
Any HTTP client works (curl, fetch, requests). Examples below use curl.
https://mcp.servicegraph.co) loaded in
your harness — this plugin's .mcp.json wires it up; OAuth 2.1 + PKCE
keeps credentials in the harness sandbox — orvk_…, minted at
https://servicegraph.co/profile/api-keys) available as
SERVICEGRAPH_API_KEY in the environment or .env.local for the REST
path (setup steps under Auth below).curl.The loop is free-first: discovery, validation, search, and brief reads cost nothing; only unlock after the user confirms the spend.
GET /v1/datasets/pro_services/fields?include_values=1 — confirm the
fields and values you plan to filter on exist.GET /v1/datasets/pro_services/check — or draft it from plain English via
POST /v1/datasets/pro_services/translate-intent.GET /v1/datasets/pro_services/search — present the free brief cards and
let the user pick.POST /v1/datasets/pro_services/unlocks with the chosen apexes; report the
revealed detail.GET /v1/me/credits to report the remaining balance when asked.If your agent harness has the ServiceGraph MCP server loaded
(https://mcp.servicegraph.co) — recognizable by tool names
containing servicegraph — prefer those tools over raw HTTP. The
MCP server uses OAuth 2.1 + PKCE so the harness handles credentials
in its own sandbox and no token value ever enters the LLM context.
Otherwise, fall through to the REST flow described below.
Every endpoint requires the bearer (Authorization: Bearer vk_…).
There is no anonymous tier.
| Endpoint | Cost | Use it for |
|---|---|---|
GET /v1/datasets | free | Discover available datasets. |
GET /v1/datasets/pro_services | free | Full schema for this dataset (brief vs detail fields, allowed filters, unlock price, TTL). |
GET /v1/datasets/pro_services/fields[?include_values=1&q=] | free | Filter-field catalog + DSL grammar. Call this first per session. |
GET /v1/datasets/pro_services/values/:field[?q=&limit=&offset=] | free | Enumerate values for one field (e.g. legal industry / state / service_provided values). |
GET /v1/datasets/pro_services/check?filter=… | free | Validate a filter string. Returns {valid, normalized} or {valid:false, error}. |
POST /v1/datasets/pro_services/translate-intent | free | Body {intent, model?}. LLM-translates plain English → DSL filter + sanity-check row count. |
GET /v1/datasets/pro_services/search?filter=…&limit=&offset= | free | Brief firm cards + per-row unlock hint. No url, no phone, no email. |
GET /v1/datasets/pro_services/:apex | free | One row: always brief; detail block only if caller has an active unlock for (user, dataset, apex). Idempotent, never charges. |
POST /v1/datasets/pro_services/unlocks | 10 credits / firm | Body {apexes: [...]}, max 100. Atomic batch — either all uncached apexes unlock, or none do (402 if balance short). Already-unlocked rows return was_cached:true with no extra charge. Detail TTL: 30 days. Returns brief + detail + per-item billing. |
GET /v1/me/credits | free | Current credit balance. |
GET /v1/me/credits/transactions[?limit=&offset=] | free | Spend history; unlock rows carry (dataset_id, apex, expires_at). |
Cost model in one paragraph. Discovery, validation, search, and
brief reads are free. Detail data (apex, full url, phone, email,
social, address, legal name, platforms map) costs 10 credits per
firm and lasts 30 days. Re-fetching an unlocked firm within the
TTL is free — both the detail GET and the unlock POST honor the
cache. Charges are atomic per POST /unlocks call: a 402 leaves
balance untouched.
Tokens are vk_* API keys minted in the dashboard. The user creates
them themselves; this skill never sees raw email/password.
Security model — keep the token out of the LLM context.
.env, .env.local, or any other credential file
into your context. The token's literal value must never appear in
the conversation.Authorization header without round-tripping through the LLM.First-call resolution:
Just try the call. Dispatch via shell, sourcing .env.local
if present:
( set -a; [ -f .env.local ] && . ./.env.local; set +a;
curl -sS -H "Authorization: Bearer $SERVICEGRAPH_API_KEY" \
'https://api.servicegraph.co/v1/datasets/pro_services/fields' )On 401 unauthorized, prompt the user (don't accept the key
in chat):
"I need a ServiceGraph API key. Open https://servicegraph.co/profile/api-keys, sign in, click Create key, and copy the
vk_…value.Then either export it in your shell —
export SERVICEGRAPH_API_KEY=vk_…— or add the lineSERVICEGRAPH_API_KEY=vk_…to.env.localin this directory. Tell me when done and I'll retry. Please don't paste the key into chat — keep it out of the LLM context."
After the user signals ready, re-dispatch the same call. If a
later call returns 401, the key was revoked or rotated — re-prompt.
For the user's convenience: if SERVICEGRAPH_API_KEY is already set
or already in .env.local, the very first call will succeed and the
prompt step never happens.
One query parameter, GitHub-search-style.
filter := orExpr
orExpr := andExpr ("OR" andExpr)*
andExpr := notExpr (("AND")? notExpr)* # whitespace = implicit AND
notExpr := ("NOT" | "-") notExpr | atom
atom := "(" filter ")" | predicate
predicate:= IDENT op valueOrList | bareword
op := ":" | "=" | ">=" | "<=" | ">" | "<"
valueOrList := value ("," value)*
value := IDENT | NUMBER | tagAtEvidence
tagAtEvidence := IDENT "@" ("low"|"medium"|"high")
bareword := IDENT | NUMBER # → keyword:<bareword>Four rules that bite:
a OR b c parses as a OR (b AND c).
Use parens.state:CA,NY,TX matches
any of the three.-x or NOT x. Negative literals inside a comma
list are not allowed: state:CA,-NY is rejected. Use
state:CA -state:NY.keyword:"foo bar". Punctuation
(& ' . ; ! ? * / etc.) is silently dropped outside quotes, and
stray commas are treated as ANDs — so paste-friendly inputs like
Cox, Castle & Nicholson work without quoting.Field kinds you'll use most:
industry, state, service_model, geography_served, company_size_signal, pricing_model — op : only.service_provided — Map<tag, evidence∈{low,medium,high}>. Op : with optional @evidence.rating, review_count_total, founded_year, linkedin_employees, etc. — ops =, >=, <=, >, <.has:phone, has:clutch, has:rating, has:linkedin_company, etc.Examples (validate yours with /check):
industry:marketing_agency service_provided:seo
dental industry:marketing_agency
industry:legal state:CA,NY -company_size_signal:solo
industry:management_consulting (service_provided:strategy-consulting@high OR service_provided:operations-consulting@high)
state:CA has:phone has:email
rating>=4 review_count_total>=20 has:clutch
industry:it_services NOT (service_provided:web-development OR service_provided:hosting)
"Cox, Castle & Nicholson"Don't put kind: in the filter — the dataset URL is authoritative and
the API will reject it. Don't use fields outside this dataset's allowed
list either; /check will tell you which ones.
apexFirms are identified by their apex domain (registered domain only:
mckinsey.com, not www.mckinsey.com/about). When the user gives you
URLs, strip to the apex before calling /datasets/pro_services/:apex
or POST /unlocks. The endpoint accepts any lowercase host-shaped
string; a 404 means the firm isn't in this dataset (no charge).
All responses are JSON.
apex, name, location, and
rating signals — plus a per-row unlock hint and the match total. Briefs
never include url, phone_primary, email_primary, legal_name,
address_full, or the full platforms map.POST …/unlocks) returns each unlocked firm's detail block —
contact fields, address, socials, the platforms map — plus per-item
billing; detail stays readable for 30 days.{"error": {"code": "…", "message": "…"}} — see Errors below.GET /v1/datasets/pro_services/search?filter=industry:legal+state:CA+-company_size_signal:solo&limit=20
# → 20 brief cards + total + per-row unlock.status; pick top 3 with user
# user agrees → unlocking 3 firms costs 30 credits, 30-day TTL
POST /v1/datasets/pro_services/unlocks
{ "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }
# → brief + detail (url, phone, email, social, address) for all 3User: "Marketing agency that does both branding and SEO at high evidence."
GET /v1/datasets/pro_services/search?filter=industry:marketing_agency+service_provided:branding@high+service_provided:seo@high&limit=10User: "Consultancies with at least 4★ and 20+ reviews and a Clutch listing."
GET /v1/datasets/pro_services/search?filter=industry:management_consulting+rating>=4+review_count_total>=20+has:clutch&limit=10User: "I need someone to handle our open enrollment communications for 200 employees."
That's HR/benefits comms. Either translate by hand or hand it to the intent translator:
POST /v1/datasets/pro_services/translate-intent
{ "intent": "open enrollment communications for 200 employees" }
# → {filter: "...", reasoning: "...", valid, normalized, count}Then validate with /check and run /search. If the breakdown is
thin, broaden — drop the service tag, add adjacent industries, or
fall back to keyword.
User: "HIPAA-savvy IT consultancies in Texas."
GET /v1/datasets/pro_services/search?filter=hipaa+industry:it_services+state:TX&limit=10hipaa is a bareword keyword → substring match in firm text.
User pastes 12 domains. Two-step:
GET /v1/datasets/pro_services/:apex for each — free brief, 404
for not-in-catalog (no charge). Flag misses to the user.POST /v1/datasets/pro_services/unlocks with all of them =
10×N credits, single atomic charge, single response with
detail bundles.Within the 30-day TTL, re-running step 2 is free for the same apexes.
looks_not_pro_services / not_in_dataset 404 is not a bug. A firm may exist in another dataset but 404 on /datasets/pro_services/:apex if its kind doesn't include pro_services. Skip and continue; not charged./search do NOT include apex ... wait, they do. Briefs include apex (and name, industry, service_provided, location, ratings). What they DON'T include: url, phone_primary, email_primary, legal_name, address_full, full platforms map. Those require an unlock./fields?include_values=1. Inventing industry:law instead of industry:legal returns zero results silently — the parser doesn't validate categorical values.family law parses as two AND'd keywords (family AND law); "family law" parses as a single phrase.POST /unlocks with 5 apexes either charges 50 credits (or less if some were cached) or charges nothing on 402. Plan the batch — don't dribble single-apex calls.POST /unlocks for an apex that's still inside its 30-day TTL returns was_cached:true and no charge. Re-pagination of /search is free regardless./translate-intent is a convenience, not a contract. It may return filter:"" if the intent is too vague, or a filter that doesn't match what the user wanted. Always inspect reasoning and the sanity-check count before running /search.All errors return JSON: {"error": {"code": "...", "message": "..."}}.
| Status | Code | What to do |
|---|---|---|
| 400 | filter_parse_error | Payload includes position. Fix the filter, re-validate with /check. |
| 400 | filter_required | Empty filter where one is required. |
| 400 | kind_in_filter | The URL is authoritative — strip any kind: predicate from the filter. |
| 400 | field_not_in_dataset | The filter references a field this dataset doesn't expose. Drop it or pick a different dataset. |
| 400 | invalid_apex | Apex doesn't look like a domain. Re-normalize. |
| 401 | unauthorized / invalid_audience | Key missing/expired/wrong audience. Re-prompt for a new vk_… from /profile/api-keys. |
| 402 | insufficient_credits | Balance too low for the unlock batch. Response carries needed and balance. Surface to the user; nothing was charged. |
| 404 | unknown_dataset | Wrong dataset id in the URL. |
| 404 | not_found | Apex isn't in the catalog. Not charged. Skip and continue. |
| 404 | not_in_dataset / apex_not_in_dataset | Apex exists but its kind doesn't include pro_services. Not charged. Skip. |
| 429 | rate_limited | Honor Retry-After header. |
Authed responses carry X-RateLimit-* headers. GET /me/credits is
the source of truth for spend planning.
User: "Find me three top management-consulting firms in California focused on strategy, with strong third-party ratings."
# 1. Discover fields once per session
GET /v1/datasets/pro_services/fields?include_values=1
# Confirms 'management_consulting', 'strategy-consulting', 'rating' are legal.
# 2. Validate the filter (free)
GET /v1/datasets/pro_services/check?filter=industry:management_consulting+state:CA+service_provided:strategy-consulting@high+rating>=4+review_count_total>=20
# 3. Search briefs (free)
GET /v1/datasets/pro_services/search?filter=...&limit=10
# → 10 brief cards + total + per-row unlock.status:'none'
# 4. Present briefs, get user's pick of 3. Tell them: "Unlocking 3
# firms costs 30 credits and gives 30 days of detail access."
# 5. Atomic batch unlock (charges 30 credits, returns detail too)
POST /v1/datasets/pro_services/unlocks
{ "apexes": ["firm-a.com", "firm-b.com", "firm-c.com"] }
# → brief + detail (url, phone, email, social, address, platforms) ×3
# 6. (Optional) Confirm remaining balance
GET /v1/me/creditsservicegraph (this plugin) — the dataset-agnostic entry point
when the user names ServiceGraph explicitly.© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/mcp/servicegraph/skills/find-service-providers of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Find Service Providers next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Find Service Providers this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~4.7k | Automated safety check: Notes | MIT | |
| Attribution Reconcileraaron-he-zhu/aaron-marketing-skills | 2.9k | 2 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| Odoo Agency Fleet Reviewerpipe-org/mcp-odoo | 421 | — | ~699 | Automated safety check: Pass | MIT | |
| Travel Expense ReimbursementFoxtailsss-Andy/Anna-Agent | 147 | — | ~812 | Automated safety check: Pass | MIT | |
| Odoo Month End Closeerpipe-org/mcp-odoo | 421 | — | ~753 | Automated safety check: Pass | MIT | |
| Longbridge Value Investinghelsome/folio | 271 | 1 repos | ~1.2k | Automated safety check: Pass | MIT |
aaron-he-zhu/aaron-marketing-skills
A skill your agent uses when platform-reported conversions disagree with GA4/ecommerce, when you suspect Meta and Google are double-counting the same sales, or for a standing (monthly)…
erpipe-org/mcp-odoo
Review many client Odoo databases at once through odoo-mcp's cross-instance tools — fleet-wide accounting health, per-client aging, partial-failure triage — for agencies and partners managing 5–50…
Foxtailsss-Andy/Anna-Agent
Create, validate, submit, and verify employee travel and expense reimbursements through Anna Cowork and MCP.
erpipe-org/mcp-odoo
Drive a month-end accounting close on Odoo through odoo-mcp — AR/AP aging, open-item and draft-invoice review, reconciliation checklists, and chatter documentation — with human sign-off at every…
helsome/folio
Value investing analysis using Graham (NCAV/net-net/defensive-investor) and Buffett (economic moat/ROE/FCF) methodologies.
nteract/nteract
Understand the MCP server session lifecycle: attachment ownership, proxy supervision, daemon reconciliation, explicit notebook routing, readiness, scoped subscriptions, rejoin races, and room…
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.
jeremylongshore/tons-of-skills-marketplace
Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.
jeremylongshore/tons-of-skills-marketplace
Execute proactive auto-loading: automatically detects and loads agents.md files.
jeremylongshore/tons-of-skills-marketplace
Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.
jeremylongshore/tons-of-skills-marketplace
Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.
Works with
Categories
A skill your agent uses whenever the user wants to find, shortlist, vet, enrich, or research US professional-services firms — law, marketing, consulting, accounting, IT services, architecture…. Find Service Providers is an agent skill from jeremylongshore/tons-of-skills-marketplace. Use whenever the user wants to find, shortlist, vet, enrich, or research US professional-services firms — law, marketing, consulting, accounting, IT services, architecture, engineering, HR, PR, design, and similar B2B service providers.
Find Service Providers fits situations like: the user wants to find; research US professional-services firms — law; similar B2B service providers; requests like find me a PPC agency in California.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a claude-code`. Or copy the skill folder (plugins/mcp/servicegraph/skills/find-service-providers in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/find-service-providers in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a codex`. Or copy the skill folder (plugins/mcp/servicegraph/skills/find-service-providers in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/find-service-providers in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill find-service-providers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/find-service-providers, .gemini/skills/find-service-providers, .github/skills/find-service-providers and .opencode/skills/find-service-providers in your project.
Going by SKILL.md and its folder, Find Service Providers needs the command-line tools its instructions call (curl) and credentials named SERVICEGRAPH_API_KEY. Our summary lists: A credential in SERVICEGRAPH_API_KEY. Its frontmatter pre-approves these tools: Bash(curl:*), mcp__servicegraph__list_fields, mcp__servicegraph__list_field_values, mcp__servicegraph__check_filter, mcp__servicegraph__translate_intent, mcp__servicegraph__search_dataset, mcp__servicegraph__get_row, mcp__servicegraph__unlock_rows, mcp__servicegraph__get_credit_balance. Compatibility (from SKILL.md): Designed for Claude Code.
SKILL.md names 4 domains. In commands or code: api.servicegraph.co and mcp.servicegraph.co; the agent is likely to contact these when it follows the instructions. As links in the text: servicegraph.co and github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Find Service Providers is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Find Service Providers: Attribution Reconciler (aaron-he-zhu/aaron-marketing-skills, 2.9k stars), Odoo Agency Fleet Review (erpipe-org/mcp-odoo, 421 stars), Travel Expense Reimbursement (Foxtailsss-Andy/Anna-Agent, 147 stars) and Odoo Month End Close (erpipe-org/mcp-odoo, 421 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.
Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.