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

B
Calidad de la descripción
83%
Integridad del esquema
62%
Calidad de los nombres
100%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (5)

  • LOWTool 'search_posts' description lacks action verben search_posts
  • LOWTool 'get_post' description lacks action verben get_post
  • LOWTool 'list_projects' description lacks action verben list_projects
  • LOWTool 'get_project' description lacks action verben get_project
  • LOWTool 'get_about' description lacks action verben get_about

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~2,313Tokens (definiciones de herramientas)
~1.8 KBTamaño de respuesta típico
Impacto moderado en la atención (1.81% del contexto de 128k)

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-http

Qué puede hacer

Inventario de herramientas

Herramientas (12)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada12 herramientas
verificadoversión no registrada12 herramientas