CEM MCP
The CEM MCP server allows an agent to connect to the CEM Research Project endpoint to access published research on building with AI, including definitions, papers, calculators, and the CEM Score.
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.
https://mcp.cemresearchproject.org/mcpWhat its tools do
14 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
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 cemresearchproject.org ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Access CEM published research on building with AI
- Retrieve definitions and papers related to AI in construction
- Use calculators and CEM Score tools
Source and maintenance
Protocol and capabilities
- Server
- cem 0.1.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 14 advertised
- Resources
- 4 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
14 advertised
ui_list — List the UI kit
The CEM UI kit (cem-ui registry/): tokens, brand assets, layout primitives, utilities, engines, frames, templates, components (one per job) and the old partials. Without a kind, the count of each kind and their ids; with one, every entry of that kind. Kinds: token, asset, primitive, utility, engine, frame, template, component, partial.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"kind": {
"enum": [
"token",
"asset",
"primitive",
"utility",
"engine",
"frame",
"template",
"component",
"partial"
],
"type": "string",
"description": "Only this kind"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ui_search — Search the UI kit
Find UI kit entries (cem-ui registry/) whose id, name or any recorded field holds every word of the query. Returns the best matches, id first.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"kind": {
"enum": [
"token",
"asset",
"primitive",
"utility",
"engine",
"frame",
"template",
"component",
"partial"
],
"type": "string",
"description": "Only this kind"
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "At most this many (default 20)"
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Words to find, e.g. \"site header\" or \"tabs\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ui_get — Get a UI kit entry
One UI kit entry in full, as cem-ui registry/ records it: by id ("site-header", "shell", "spacing", "CRP:ask-cem-panel"), component tag ("x-site-header") or name.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Id, x- tag or name"
},
"kind": {
"enum": [
"token",
"asset",
"primitive",
"utility",
"engine",
"frame",
"template",
"component",
"partial"
],
"type": "string",
"description": "Only this kind, when an id is shared"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ui_laws — Read the design laws
The CEM design laws, cem-ui LAWS.md, the one rules document. Without a law, the whole file. With a number (1 to 20), that law as written. With words ("accent edge", "white"), every law that holds all of them.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"law": {
"type": "string",
"maxLength": 80,
"description": "A law number, or words to find in the laws"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ui_check — Run the laws check
Run cem-ui's laws check (scripts/laws.mjs, `npm run laws`) and return its table: each law's check, the count now, and the baseline it may not rise above. It checks cem-ui's own css/ and templates/; it takes no other repo. With a check name, every finding for that check (laws.mjs --list). Never records a baseline.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"check": {
"type": "string",
"pattern": "^[a-z][a-z-]*$",
"maxLength": 40,
"description": "One check, e.g. \"no-accent-edge\" or \"surface-ladder\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}calculators_list — List the calculators
The 21 CEM calculators, the same on every site (cem-ui registry/tools.json), with what each measures, and its page and formula code from CRP's search index when CRP is up.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}calculator_get — Get a calculator
One calculator: what it measures (cem-ui registry/tools.json), its inputs with their defaults, and its formula as the calculator's own code computes it (templates/tool-calcs/{slug}.blade.php: the recalc function, the helpers it calls and its constants), and the citation it gives.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"pattern": "^[a-z0-9-]+$",
"maxLength": 60,
"description": "e.g. \"drift-tax\", \"build-compression\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}cem_score — Score the CEM Score self-assessment
Score answers to the CEM Score self-assessment (24 questions, 12 dimensions) by the calculator's own rules (cem-ui templates/tool-calcs/cem-score.blade.php: getDimGrade, updateScores). Without answers, the 24 questions with each answer's score. Answers are keyed by question (d1q1 … d12q2), each the chosen answer's score, 1 to 5. Nothing is stored.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"answers": {
"type": "object",
"description": "e.g. {\"d1q1\": 5, \"d1q2\": 4}",
"propertyNames": {
"type": "string",
"pattern": "^d\\d{1,2}q[12]$"
},
"additionalProperties": {
"type": "integer",
"maximum": 5,
"minimum": 1
}
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}research_search — Search the research
Find CEM research by words or code in CRP's public search index (GET /search/index.json): papers, playbooks, case studies, book chapters, figures, calculators and pages. Every word must match the title, full title, summary or code. Returns each result's code, title, kind and address.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"kind": {
"type": "string",
"maxLength": 40,
"description": "Only this kind, as the index names it, e.g. \"Playbook\", \"Tool\", \"Page\""
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "At most this many (default 10)"
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Words or a code, e.g. \"drift tax\", \"DOI-07\", \"PB-011\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}reviews_search — Search the tool reviews
Find CEM's reviews of software tools (reviews.cemresearchproject.org): tool reviews, product pages with their listed prices, buying guides and categories, by words. Every word must match the title or summary. Returns each result's title, kind, summary and page. These are reviews of tools, separate from CEM's research.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"kind": {
"enum": [
"Reviews",
"Products",
"Guides",
"Categories",
"Pages"
],
"type": "string",
"description": "Only this kind"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "At most this many (default 10)"
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Words, e.g. \"newsletter\", \"shopify page builder\", \"beehiiv\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}research_get — Get research by code
One public CEM document by its code (DOI-07, PB-011, …): its entry in CRP's search index and its markdown from work-hub content/ (located through the content_index table). Only codes CRP lists publicly are served.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "The code, e.g. \"DOI-07\""
},
"max_chars": {
"type": "integer",
"maximum": 400000,
"minimum": 1000,
"description": "Cut the markdown at this many characters (default 60000)"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}cem_answer — Instant answer
Use for any question about CEM (the Compounding Execution Method) or a term it defines, such as the Drift Tax, the Pendulum, the Governor, Sweeps, Cycles or operator levels, and for questions about building or operating with AI that CEM's research covers. Returns CEM's own definition with its code (cite it, e.g. F-003) and the best research documents, each with its code, one-line summary and page. Free and instant. Use it first; ask_cem writes a longer answer when someone wants to go deeper.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 2,
"description": "The question, e.g. \"What is the Pendulum?\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ask_cem — Ask CEM
A longer written answer from CEM's research, with the passages it drew on and their pages. Use it only after cem_answer, and only when the person asks to go deeper or wants more than the definition and documents give: for what a term means, cem_answer is the answer, free and instant. At most 100 written answers a day across every channel; past that, or when the AI account can't answer, it returns the closest research instead.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 2,
"description": "The question"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}ask_op01 — Ask OP-01
OP-01's view: the operator in CEM's research, the one person whose every commit, session and dollar the research measures. By default, free and instant: OP-01's published positions that bear on the question, each with when it applies, and the closest published research; write the answer from them in your own words and keep his positions apart from what you infer. With deeper: true, a written answer in OP-01's own voice from the same material, counted on the same daily limit as ask_cem; use it only when the person asks to go deeper. For the method's own view, use cem_answer.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"question"
],
"properties": {
"deeper": {
"type": "boolean",
"description": "A written answer in his voice (counts on the daily limit)"
},
"question": {
"type": "string",
"maxLength": 2000,
"minLength": 2,
"description": "What to ask OP-01, e.g. \"Should I raise money or build with what I have?\""
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
4 advertised
CEM answer
CEM's definition and the documents behind it
ui://cem/answerCEM Score
The CEM Score self-assessment: the questions, then your score by dimension
ui://cem/scoreCEM research
CEM research matching a search, each document with its page
ui://cem/searchCEM calculator
A calculator's inputs, formula and citation
ui://cem/calculator30-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
- 718 ms
- 95th percentile latency
- 718 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 718 ms · metadata changed · 14 tool(s), 4 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http cem-mcp https://mcp.cemresearchproject.org/mcpCodex
codex mcp add cem-mcp --url https://mcp.cemresearchproject.org/mcpCursor
{
"mcpServers": {
"cem-mcp": {
"url": "https://mcp.cemresearchproject.org/mcp"
}
}
}Cline
{
"mcpServers": {
"cem-mcp": {
"type": "streamableHttp",
"url": "https://mcp.cemresearchproject.org/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"cem-mcp": {
"type": "http",
"url": "https://mcp.cemresearchproject.org/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http cem-mcp https://mcp.cemresearchproject.org/mcpClaude Desktop
https://mcp.cemresearchproject.org/mcpWindsurf
{
"mcpServers": {
"cem-mcp": {
"serverUrl": "https://mcp.cemresearchproject.org/mcp"
}
}
}Let your agent find its tools
Find servers like CEM MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run CEM 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.