Koskamo

Compensation Professional MCP

Provides read-only access to Compensation Professional's compensation-focused book library, query-based answers, and wage-compliance data. It exposes tools to list feeds, search and retrieve library works, get specific answers, and retrieve wage jurisdiction details via JSON-RPC 2.0.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Compensation Professional MCP logo, by Compensation ProfessionalVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by Compensation Professional
MCP endpoint (Streamable HTTP)
https://compensationprofessional.com/api/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to compensationprofessional.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search the compensation book library
  • Retrieve specific library works
  • Get wage compliance jurisdiction data
  • Query compensation answers

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
compensationprofessional-discovery 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

6 advertised

list_compensationprofessional_feeds — List Compensation Professional feeds
Advertised by the server during the last successful anonymous check.
Advertised read-only

List Compensation Professional's free machine-readable feeds and their MCP/REST availability. OpenAPI is also published at https://compensationprofessional.com/openapi.json.

list_compensationprofessional_feeds input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
list_compensationprofessional_feeds output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "count",
    "openapi",
    "feeds"
  ],
  "properties": {
    "count": {
      "type": "number"
    },
    "feeds": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "method",
          "path",
          "summary",
          "mcpTool",
          "rest",
          "auth"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "auth": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "rest": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "mcpTool": {
            "type": [
              "string",
              "null"
            ]
          },
          "summary": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "openapi": {
      "type": "string"
    },
    "contract": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
list_compensationprofessional_feeds annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
search_library — Search the compensation library catalog
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search or list the compensation-focused book library by title/author substring and/or classifier tag. No filters returns the first page.

search_library input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "tag": {
      "type": "string",
      "description": "Case-insensitive classifier-tag substring."
    },
    "limit": {
      "type": "integer",
      "maximum": 100,
      "minimum": 1,
      "description": "Max rows to return (default 25, max 100)."
    },
    "query": {
      "type": "string",
      "description": "Case-insensitive title/author substring."
    }
  }
}
search_library output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "query",
    "tag",
    "total",
    "count",
    "results"
  ],
  "properties": {
    "tag": {
      "type": [
        "string",
        "null"
      ]
    },
    "count": {
      "type": "number"
    },
    "query": {
      "type": [
        "string",
        "null"
      ]
    },
    "total": {
      "type": "number"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "libraryId",
          "title",
          "author",
          "year",
          "tags",
          "canonicalUrl"
        ],
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "year": {
            "type": [
              "number",
              "null"
            ]
          },
          "title": {
            "type": "string"
          },
          "author": {
            "type": [
              "string",
              "null"
            ]
          },
          "libraryId": {
            "type": "string"
          },
          "canonicalUrl": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "contract": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
search_library annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_library_work — Get a compensation library work
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns one compensation library work's bibliographic record and (when profiled) its thesis.

get_library_work input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "libraryId"
  ],
  "properties": {
    "libraryId": {
      "type": "string",
      "description": "Library catalog id (e.g. lib933f3afbe567c9ab)."
    }
  }
}
get_library_work output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "libraryId",
    "title",
    "author",
    "year",
    "tags",
    "logline",
    "pitch",
    "canonicalUrl"
  ],
  "properties": {
    "tags": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "year": {
      "type": [
        "number",
        "null"
      ]
    },
    "pitch": {
      "type": [
        "string",
        "null"
      ]
    },
    "title": {
      "type": "string"
    },
    "author": {
      "type": [
        "string",
        "null"
      ]
    },
    "logline": {
      "type": [
        "string",
        "null"
      ]
    },
    "contract": {
      "type": "string"
    },
    "libraryId": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_library_work annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_answer — Get a query-shaped compensation answer
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns one authored /answers page as structured content: question, short answer, problem frame, and citations. Known slugs (14): how-to-set-pay-ranges, what-should-we-pay-for-a-role, is-our-pay-competitive, how-to-tie-executive-pay-to-performance, executive-compensation-components, how-much-executive-pay-at-risk, business-case-for-changing-rewards, make-financial-case-for-compensation, ….

get_answer input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Answer slug from the query map (e.g. how-to-set-pay-ranges)."
    }
  }
}
get_answer output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "slug",
    "question",
    "relatedQuestions",
    "problemFrame",
    "shortAnswer",
    "categoryTerms",
    "contentTargets",
    "sources",
    "citations",
    "canonicalUrl"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "sources": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "libraryId",
          "title"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "author": {
            "type": "string"
          },
          "libraryId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "contract": {
      "type": "string"
    },
    "question": {
      "type": "string"
    },
    "citations": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "libraryId": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "shortAnswer": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "problemFrame": {
      "type": "string"
    },
    "categoryTerms": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "contentTargets": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "href",
          "label"
        ],
        "properties": {
          "href": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "relatedQuestions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
get_answer annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_wage_jurisdiction — Get an effective-dated minimum-wage record
Advertised by the server during the last successful anonymous check.
Advertised read-only

Returns one tracked jurisdiction's current minimum-wage rate, effective date, validation status, and next scheduled step. 113 known jurisdictions, e.g.: federal, alaska, alabama, arkansas.

get_wage_jurisdiction input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Jurisdiction slug (e.g. federal, california)."
    }
  }
}
get_wage_jurisdiction output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "slug",
    "name",
    "displayName",
    "fullLabel",
    "type",
    "typeLabel",
    "stateCode",
    "rate",
    "currency",
    "classification",
    "effectiveStart",
    "validationStatus",
    "confidence",
    "scheduledRule",
    "source",
    "retrievedAt",
    "canonicalUrl"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "rate": {
      "type": "number"
    },
    "slug": {
      "type": "string"
    },
    "type": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "contract": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "fullLabel": {
      "type": "string"
    },
    "stateCode": {
      "type": [
        "string",
        "null"
      ]
    },
    "typeLabel": {
      "type": "string"
    },
    "confidence": {
      "type": "number"
    },
    "displayName": {
      "type": "string"
    },
    "retrievedAt": {
      "type": "string"
    },
    "canonicalUrl": {
      "type": "string"
    },
    "scheduledRule": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "rate",
            "effectiveStart",
            "jurisdictionDisplayName"
          ],
          "properties": {
            "rate": {
              "type": "number"
            },
            "effectiveStart": {
              "type": "string"
            },
            "jurisdictionDisplayName": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "classification": {
      "type": "string"
    },
    "effectiveStart": {
      "type": "string"
    },
    "validationStatus": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_wage_jurisdiction annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
check_wage_locations — Check the binding minimum wage for multiple locations
Advertised by the server during the last successful anonymous check.
Advertised read-only

Checks the binding minimum-wage rate for up to 50 US locations in one call (city/county rate when it applies, else state, else federal). Each location may be a place name ("Spokane, WA", "Texas", "TX") or a jurisdiction slug. A city with no rule of its own on file returns its state's rate with noLocalRule:true. An unmatched location returns found:false with a reason instead of being omitted. 113 known jurisdictions, e.g.: federal, alaska, alabama, arkansas.

check_wage_locations input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "locations"
  ],
  "properties": {
    "locations": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 50,
      "minItems": 1,
      "description": "Up to 50 places, one per item: \"City, ST\", a state name or code, or a slug (e.g. Spokane, WA; texas; seattle-wa)."
    },
    "rangeMinimum": {
      "type": "number",
      "description": "Optional proposed hourly range minimum; each found row returns belowRangeMinimum (CP-129/130).",
      "exclusiveMinimum": 0
    }
  }
}
check_wage_locations output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "contract",
    "requested",
    "found",
    "results",
    "source",
    "retrievedAt"
  ],
  "properties": {
    "found": {
      "type": "number"
    },
    "source": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "input",
          "found"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "rate": {
            "type": "number"
          },
          "slug": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "found": {
            "type": "boolean"
          },
          "input": {
            "type": "string"
          },
          "reason": {
            "enum": [
              "not_recognised",
              "ambiguous"
            ],
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "fullLabel": {
            "type": "string"
          },
          "stateCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "typeLabel": {
            "type": "string"
          },
          "candidates": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "didYouMean": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayName": {
            "type": "string"
          },
          "noLocalRule": {
            "type": "boolean"
          },
          "canonicalUrl": {
            "type": "string"
          },
          "scheduledRule": {
            "anyOf": [
              {
                "type": "object",
                "required": [
                  "rate",
                  "effectiveStart",
                  "jurisdictionDisplayName"
                ],
                "properties": {
                  "rate": {
                    "type": "number"
                  },
                  "effectiveStart": {
                    "type": "string"
                  },
                  "jurisdictionDisplayName": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "effectiveStart": {
            "type": "string"
          },
          "belowRangeMinimum": {
            "type": "object",
            "required": [
              "now",
              "next",
              "nextEffective"
            ],
            "properties": {
              "now": {
                "type": "boolean"
              },
              "next": {
                "type": "boolean"
              },
              "nextEffective": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    },
    "contract": {
      "type": "string"
    },
    "requested": {
      "type": "number"
    },
    "retrievedAt": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
check_wage_locations annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
625 ms
95th percentile latency
625 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 625 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http compensation-professional-mcp https://compensationprofessional.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add compensation-professional-mcp --url https://compensationprofessional.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable compensation-professional-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "compensation-professional-mcp": {
      "url": "https://compensationprofessional.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "compensation-professional-mcp": {
      "type": "streamableHttp",
      "url": "https://compensationprofessional.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start compensation-professional-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "compensation-professional-mcp": {
      "type": "http",
      "url": "https://compensationprofessional.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http compensation-professional-mcp https://compensationprofessional.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://compensationprofessional.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "compensation-professional-mcp": {
      "serverUrl": "https://compensationprofessional.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Compensation Professional MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Compensation Professional MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing