Cameron Rye's blog, projects, resume, and live site stats, plus contact and newsletter tools.
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.
Return a short bio about Cameron Rye, the portfolio owner.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Return a short bio about Cameron Rye, the portfolio owner.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Return what Cameron is currently working on, learning, building, reading, and up to in life — the live /now page sections.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Return the full markdown body and frontmatter of a post by slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
}
}Return the full markdown body and frontmatter of a project by slug.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Return Cameron's reading list — books currently reading, finished, or abandoned, with notes. Filter by status if given.
| Argument | Type | Description |
|---|---|---|
| status | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"reading",
"finished",
"abandoned"
],
"type": "string"
}
}
}Return up to N most recent published blog posts.
| Argument | Type | Description |
|---|---|---|
| limit | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1
}
}
}Return all portfolio projects with their slug, title, and short description.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Case-insensitive substring match across title, description, and tags. Returns up to 10 matches.
| Argument | Type | Description |
|---|---|---|
| query* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"minLength": 1
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
}
}Send Cameron a message through the site contact form. Subject to the same validation and per-IP rate limits as the contact form itself.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| email* | string | |
| message* | string | |
| subject* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"email",
"subject",
"message"
],
"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,}$"
},
"message": {
"type": "string"
},
"subject": {
"type": "string"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| email* | string | |
| source | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"email"
],
"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
}
}
}