Cameron Rye Portfolio MCP Server
Cameron Rye's blog, projects, resume, and live site stats, plus contact and newsletter tools.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (5)
- LOWin search_posts
- LOWin get_post
- LOWin list_projects
- LOWin get_project
- LOWin get_about
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"portfolio": {
"url": "https://rye.dev/mcp"
}
}
}Remote-Endpunkte
https://rye.dev/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (12)
🟢list_posts(limit)
Return up to N most recent published blog posts.
Eingabe-Schema
{
"type": "object",
"properties": {
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"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#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"reading",
"finished",
"abandoned"
]
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"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#"
}Ausgabe-Schema
{
"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.
Eingabe-Schema
{
"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#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"success": {
"type": "boolean"
},
"message": {
"type": "string"
}
},
"required": [
"success",
"message"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Nachweis