ServiceGraph
Access ServiceGraph — a structured catalog of 100k+ US professional-services firms (law, marketing, consulting, accounting, IT services, architecture…
What it can do
- List Tags: Returns the catalog of fields, kinds, operators, and (optionally) value lists that the filter DSL accepts. Call this once per session to discover what you can query. Use include_values=true
- Check Filter: Validates a filter DSL string without executing it. Returns {valid, normalized, tables_used, param_count} on success or {valid:false, error:{code,message,position}} on parse error. Cheap
- Explore Firms: Counts and per-facet breakdowns for the catalog under a filter. Use this BEFORE search_firms to size the query and choose narrowing facets. Does not return any individual firms and does
What data it sees
Do you need an account
No: the server works without sign-in
Access ServiceGraph — a structured catalog of 100k+ US professional-services firms (law, marketing, consulting, accounting, IT services, architecture, engineering, HR, PR, design) with filters for industry, services offered, location, size, ratings, and third-party listing presence.
How to connect
How to connect ServiceGraph to Claude
The server address to paste into Claude settings:
https://servicegraph--brugeman-artur.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect ServiceGraph to ChatGPT
The server address to paste into ChatGPT settings:
https://servicegraph--brugeman-artur.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect ServiceGraph to Cursor
The server address to paste into Cursor settings:
https://servicegraph--brugeman-artur.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (6)
Raw names from tools/list. Only developers need these.
| list_tags | Returns the catalog of fields, kinds, operators, and (optionally) value lists that the filter DSL accepts. Call this once per session to discover what you can query. Use include_values=true to expand the value list for every field; pass q to filter by name/description substring. |
| check_filter | Validates a filter DSL string without executing it. Returns {valid, normalized, tables_used, param_count} on success or {valid:false, error:{code,message,position}} on parse error. Cheap; use it before search_firms / explore_firms to sanity-check generated filters. |
| explore_firms | Counts and per-facet breakdowns for the catalog under a filter. Use this BEFORE search_firms to size the query and choose narrowing facets. Does not return any individual firms and does not consume monthly quota. When the filtered set has fewer than 20 firms, breakdowns are suppressed and count returns "<20". |
| search_firms | Returns brief firm cards under a filter DSL. Costs against the calling user's monthly unique-firm-view quota; re-pages and overlapping queries are free for the overlap. Brief cards do NOT include apex, url, phone, email, or address — call get_firm with the firm_id from a search result for the full disclosure bundle. Always start with list_tags to learn what fields exist, and consider explore_firms first to size the query. |
| get_firm | Returns the full disclosure bundle (apex, url, phone, email, social, legal name, address) for a single firm by firm_id. firm_id is sha256(apex.lower().rstrip(".")).hexdigest()[:12]. Costs 1 against the monthly /get quota the first time a firm is fetched in a calendar month; re-fetches in the same month are free. 404s are not charged. |
| catalog_stats | Top-level catalog statistics — total firm count, per-industry breakdowns, coverage percentages for facets and contact info. Use this for "what's in the catalog overall" rather than to find specific firms. |