Designer portfolios on made.show. Find people, read their work, request work samples.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The candidate's complete structured portfolio: experience, education, projects (problem / my part / approach / outcome / metrics / media), writing, references, languages and awards, plus computed facts like total experience and per-skill evidence. Pass `criteria` to also get an evidence map.
Handle or full name
Optional requirements to map against the portfolio
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http portfolios https://made.show/api/mcp
The candidate's complete structured portfolio: experience, education, projects (problem / my part / approach / outcome / metrics / media), writing, references, languages and awards, plus computed facts like total experience and per-skill evidence. Pass `criteria` to also get an evidence map.
| Argument | Type | Description |
|---|---|---|
| handle | string | Handle or full name |
| criteria | array | Optional requirements to map against the portfolio |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"handle": {
"type": "string",
"maxLength": 80,
"description": "Handle or full name"
},
"criteria": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxItems": 15,
"description": "Optional requirements to map against the portfolio"
}
}
}Start here whenever someone asks who a candidate is. Returns a ready-to-present introduction card (name, headline, current role, experience, strongest evidence, selected work, a quote) plus the underlying data. Present the card, then add one short paragraph relevant to the user's question.
| Argument | Type | Description |
|---|---|---|
| handle | string | The person's made.show handle ("par") or full name ("Pär Fagerberg") |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"handle": {
"type": "string",
"maxLength": 80,
"description": "The person's made.show handle (\"par\") or full name (\"Pär Fagerberg\")"
}
}
}One project in full, by slug or id.
| Argument | Type | Description |
|---|---|---|
| handle | string | Handle or full name |
| project* | string | Project slug or id |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"project"
],
"properties": {
"handle": {
"type": "string",
"maxLength": 80,
"description": "Handle or full name"
},
"project": {
"type": "string",
"maxLength": 80,
"description": "Project slug or id"
}
}
}Status of a brief sent with request_work_sample (requested, accepted, declined or submitted), and the candidate's work once submitted: summary, approach, rationale, media and links. Use when the user asks whether the candidate has replied.
| Argument | Type | Description |
|---|---|---|
| token* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"maxLength": 64,
"minLength": 10
}
}
}Map your requirements to concrete evidence in the portfolio. Returns, per criterion, the matching projects/roles/education/writing (with ids you can use in publish_tailored_view), per-skill evidence, and gaps where no written evidence exists. Lexical and conservative: use your own judgment on top.
| Argument | Type | Description |
|---|---|---|
| handle | string | Handle or full name |
| criteria* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"criteria"
],
"properties": {
"handle": {
"type": "string",
"maxLength": 80,
"description": "Handle or full name"
},
"criteria": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 2
},
"maxItems": 15,
"minItems": 1
}
}
}Compose a shareable portfolio page for your criteria, rendered in the candidate's own template. Each section is a criterion with the blocks (by kind + id from get_portfolio / match_criteria) that evidence it. You may add a short `note` per item explaining relevance; notes are labelled as AI-written. You cannot add new content: unknown ids are rejected. The candidate is notified.
| Argument | Type | Description |
|---|---|---|
| gaps | array | Criteria with no evidence. Shown honestly on the page. |
| title* | string | e.g. "Senior Product Designer — Design Systems" |
| handle | string | Handle or full name |
| company | string | |
| sections* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"sections"
],
"properties": {
"gaps": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"default": [],
"maxItems": 12,
"description": "Criteria with no evidence. Shown honestly on the page."
},
"title": {
"type": "string",
"maxLength": 100,
"minLength": 3,
"description": "e.g. \"Senior Product Designer — Design Systems\""
},
"handle": {
"type": "string",
"maxLength": 80,
"description": "Handle or full name"
},
"company": {
"type": "string",
"maxLength": 80
},
"sections": {
"type": "array",
"items": {
"type": "object",
"required": [
"criterion",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"id"
],
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"kind": {
"enum": [
"project",
"role",
"education",
"writing",
"reference"
],
"type": "string"
},
"note": {
"type": "string",
"maxLength": 240
}
}
},
"maxItems": 8
},
"criterion": {
"type": "string",
"maxLength": 200,
"minLength": 2
}
}
},
"maxItems": 12,
"minItems": 1
}
}
}Send a candidate a brief for a real work sample: what you need, the context and when you need it. Before sending, ask the user for anything missing (what they need, their company, their name and email) and show them the brief, since the candidate gets notified. The candidate accepts or declines in made.show and replies with the work and their reasoning. Returns a token: keep it in the conversation and pass it to get_work_sample to check the status or read the work.
| Argument | Type | Description |
|---|---|---|
| title* | string | |
| handle | string | Handle or full name |
| company* | string | |
| context | string | Links or background, e.g. your design system docs |
| deadline | string | |
| contactName* | string | |
| description* | string | The brief: what you want made, the ambition, constraints |
| contactEmail* | string |
Find people across every public portfolio on made.show by free text (name with or without accents, headline, bio, role titles, organizations, skills), skills, location or availability. Returns short summaries with one suggested follow-up prompt each; call get_profile or get_portfolio for depth.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query | string | |
| skills | array | All listed skills must be evidenced |
| location | string | City or country |
| remoteOnly | boolean | |
| availability | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200
},
"skills": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 10,
"description": "All listed skills must be evidenced"
},
"location": {
"type": "string",
"maxLength": 80,
"description": "City or country"
},
"remoteOnly": {
"type": "boolean"
},
"availability": {
"enum": [
"open",
"passive",
"not_looking"
],
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"company",
"contactName",
"contactEmail",
"title",
"description"
],
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 3
},
"handle": {
"type": "string",
"maxLength": 80,
"description": "Handle or full name"
},
"company": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"context": {
"type": "string",
"maxLength": 3000,
"description": "Links or background, e.g. your design system docs"
},
"deadline": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"contactName": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 3000,
"minLength": 20,
"description": "The brief: what you want made, the ambition, constraints"
},
"contactEmail": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 120
}
}
}