Cameron Rye Portfolio MCP Server
Cameron Rye's blog, projects, resume, and live site stats, plus contact and newsletter tools.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (5)
- LOWen search_posts
- LOWen get_post
- LOWen list_projects
- LOWen get_project
- LOWen get_about
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"portfolio": {
"url": "https://rye.dev/mcp"
}
}
}Puntos de conexión remotos
https://rye.dev/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (12)
🟢list_posts(limit)
Return up to N most recent published blog posts.
Esquema de entrada
{
"type": "object",
"properties": {
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"posts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"date": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"slug",
"title",
"description",
"date",
"tags"
],
"additionalProperties": false
}
}
},
"required": [
"posts"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢search_posts(query)
Case-insensitive substring match across title, description, and tags. Returns up to 10 matches.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"matches": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"date": {
"type": "string"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"slug",
"title",
"description",
"date",
"tags"
],
"additionalProperties": false
}
}
},
"required": [
"matches"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢search_site(query, limit)
Semantic (vector similarity) search across blog posts and projects — the same Cloudflare Vectorize retrieval the Ask chatbot uses, without the LLM call. Broader than search_posts (which only does exact substring matching on title/description/tags): finds conceptually related content even when the query words never appear verbatim. Returns scored chunks with deep-link URLs.
Esquema de entrada
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"default": 5,
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"score": {
"type": "number"
},
"snippet": {
"type": "string"
}
},
"required": [
"title",
"url",
"score",
"snippet"
],
"additionalProperties": false
}
}
},
"required": [
"results"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡get_post(slug)
Return the full markdown body and frontmatter of a post by slug.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"frontmatter": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"body": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"slug",
"frontmatter",
"body",
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_projects
Return all portfolio projects with their slug, title, and short description.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"slug",
"title",
"description"
],
"additionalProperties": false
}
}
},
"required": [
"projects"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_project(slug)
Return the full markdown body and frontmatter of a project by slug.
Esquema de entrada
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"frontmatter": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"body": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"slug",
"frontmatter",
"body",
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_about
Return a short bio about Cameron Rye, the portfolio owner.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_now
Return what Cameron is currently working on, learning, building, reading, and up to in life — the live /now page sections.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": [
"title",
"status"
],
"additionalProperties": false
}
}
},
"required": [
"url",
"sections"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_reading(status)
Return Cameron's reading list — books currently reading, finished, or abandoned, with notes. Filter by status if given.
Esquema de entrada
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"reading",
"finished",
"abandoned"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"books": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"author": {
"type": "string"
},
"status": {
"type": "string"
},
"started": {
"type": "string"
},
"finished": {
"type": "string"
},
"url": {
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"title",
"author",
"status"
],
"additionalProperties": false
}
}
},
"required": [
"url",
"books"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_pulse
Return live, PII-free operational stats for rye.dev: recent Core Web Vitals p75s, 30-day pageviews, trailing-30d uptime %, top-reacted pages, and the last deploy. Same data the homepage pulse strip shows.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"pulse": {
"type": "object",
"properties": {
"asOf": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"webVitals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"metric": {
"type": "string"
},
"p75": {
"type": "number"
},
"unit": {
"type": "string"
},
"rating": {
"type": "string"
}
},
"required": [
"metric",
"p75",
"unit",
"rating"
],
"additionalProperties": false
}
},
"pageviews": {
"type": "object",
"properties": {
"days": {
"type": "number"
},
"total": {
"type": "number"
},
"series": {
"type": "array",
"items": {
"type": "number"
}
}
},
"required": [
"days",
"total",
"series"
],
"additionalProperties": false
},
"uptime": {
"anyOf": [
{
"type": "object",
"properties": {
"pct": {
"type": "number"
},
"avgMs": {
"type": "number"
},
"days": {
"type": "number"
}
},
"required": [
"pct",
"avgMs",
"days"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"topReacted": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"count": {
"type": "number"
}
},
"required": [
"path",
"count"
],
"additionalProperties": false
}
},
"deploy": {
"anyOf": [
{
"type": "object",
"properties": {
"sha": {
"type": "string"
},
"message": {
"type": "string"
},
"branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"type": "string"
},
"buildSeconds": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"completedAt": {
"type": "number"
}
},
"required": [
"sha",
"message",
"branch",
"status",
"buildSeconds",
"completedAt"
],
"additionalProperties": false
},
{
"type": "null"
}
]
}
},
"required": [
"asOf",
"webVitals",
"pageviews",
"uptime",
"topReacted",
"deploy"
],
"additionalProperties": false
}
},
"required": [
"url",
"pulse"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟡submit_contact(name, email, subject, message)
Send Cameron a message through the site contact form. Subject to the same validation and per-IP rate limits as the contact form itself.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"subject": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"name",
"email",
"subject",
"message"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"success",
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}⚪subscribe_newsletter(email, source)
Subscribe an email address to the newsletter. Sends a confirmation email; the subscription only becomes active once confirmed. Same validation and per-IP rate limits as the signup form.
Esquema de entrada
{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"source": {
"type": "string",
"maxLength": 50
}
},
"required": [
"email"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Esquema de salida
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"success",
"message"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Comunidad
Evidencia