Duyet MCP Server
The Duyet MCP Server enables AI assistants to interact with Duyet's professional profile and facilitate direct communication for collaboration and hiring purposes.
Access Professional Information: Retrieve Duyet's CV in summary, detailed, or JSON formats, basic information including dynamically calculated years of experience, and recent GitHub activity with commits, issues, and pull requests
Explore Content: Fetch recent blog posts and retrieve full content of specific posts by URL
Communicate and Collaborate: Send direct messages for job opportunities, consulting, general inquiries, or friendly greetings with optional personal messages
Hiring Information: Get details about hiring Duyet for various roles (full-time, contract, consulting, part-time) including expertise and next steps
Analytics: Generate comprehensive reports on contact submissions with summary statistics, purpose breakdowns, daily trends, and recent activity
Natural Discovery: Automatically discover and access resources for fluid conversations
Offers information about Duyet's expertise with Apache Spark through CV resources and tools, enabling discussions about data engineering projects.
Deployed on Cloudflare's infrastructure with Cloudflare D1 database integration for storing messages and analytics data.
Runs on Cloudflare Workers platform, providing serverless deployment with easy one-click deployment option.
Provides access to Duyet's GitHub activity including commits, issues, pull requests and other public events through dedicated tools and resources.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Duyet MCP Servershow me Duyet's latest blog post"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
duyet-mcp-server
An experimental MCP (Model Context Protocol) server that helps AI assistants connect to and retrieve information about duyet. This server provides access to information primarily available at https://duyet.net, making it available directly to your AI assistant.
Endpoint: https://mcp.duyet.net/mcp (Streamable HTTP, stateless — works with every major MCP client)
Connect from Any MCP Client
Client | How to connect |
Claude Code |
|
Claude Desktop / claude.ai | Settings → Connectors → Add custom connector → |
Cursor | Add to |
Windsurf | Add to |
VS Code (Copilot) |
|
Codex CLI | Add to |
Gemini CLI |
|
Zed | Settings → |
Cloudflare AI Playground | Enter |
Anything else (stdio-only) | Use the mcp-remote proxy — config below |
{
"mcpServers": {
"duyet": {
"command": "npx",
"args": ["mcp-remote", "https://mcp.duyet.net/mcp"]
}
}
}

Related MCP server: Docs MCP Server
About This Project
This is a study, demo, and experimental project designed to explore MCP capabilities. The project serves as a learning exercise in building remote MCP servers and is mostly written by LLM as well.
Purpose: Enable AI assistants to access and retrieve information about duyet's work, projects, and content that would otherwise require manual web browsing.
Deploy to Cloudflare Workers
This will deploy your MCP server to a URL like: duyet-mcp-server.<your-account>.workers.dev/sse
Alternatively, you can clone and deploy using the command line:
git clone https://github.com/duyet/duyet-mcp-server
cd duyet-mcp-server
npm install
npm run deployCustomizing Your MCP Server
To add your own tools to the MCP server, define each tool inside the init() method of src/index.ts using this.server.tool(...).
Connect to Cloudflare AI Playground
You can test your MCP server using the Cloudflare AI Playground:
Enter your deployed MCP server URL (
duyet-mcp-server.<your-account>.workers.dev/sseorduyet-mcp-server.<your-account>.workers.dev/mcp)You can now use the duyet information tools directly from the playground!
Connect Claude Desktop to Your MCP Server
You can connect to your remote MCP server from Claude Desktop using the mcp-remote proxy.
To connect from Claude Desktop, follow Anthropic's Quickstart and go to Settings > Developer > Edit Config.
Update with this configuration:
{
"mcpServers": {
"duyet-info": {
"command": "npx",
"args": [
"mcp-remote",
"https://duyet-mcp-server.<your-account>.workers.dev/sse"
]
}
}
}You should see the duyet-mcp information tools become available.
Available Resources and Tools
This MCP server exposes both Resources (read-only data access via URIs) and Tools (interactive functions with parameters). Resources are automatically discovered by Claude Chat for natural conversation flow, while tools are used for actions that require user input.
Resources
Resources provide read-only access to information through URI-based requests. These are automatically discoverable by Claude Chat.
Core Information Resources
duyet://about- Basic information about Duyet with dynamically calculated years of experienceduyet://cv/{format}- CV/resume with format parameters:duyet://cv/summary- Brief CV overviewduyet://cv/detailed- Comprehensive CV informationduyet://cv/json- Structured CV data (when available)
Content Resources
duyet://blog/posts/{limit}- Latest blog posts from Duyet's technical blogduyet://blog/posts/1- Latest blog postduyet://blog/posts/5- Latest 5 blog posts (limit: 1-10)
duyet://github-activity- Recent GitHub contributions and activity
Tools
Tools provide interactive functionality with input parameters and side effects.
Core Information Tools
get_cv- Retrieve Duyet's CV (curriculum vitae) in different formats - summary, detailed, or JSON formatget_about_duyet- Get basic information about Duyet including experience, skills, and contact links
Content Tools
get_blog_posts- Get a list of blog posts from blog.duyet.net in JSON format (1-20 posts)get_blog_post_content- Get the full content of a specific blog post by URL, including title, content, and metadata (author, publish date, tags)get_github_activity- Retrieve Duyet's recent GitHub activity including commits, issues, pull requests, releases, and other public events. View up to 20 recent activities with optional detailed information
Interaction Tools
send_message- Send a message to Duyet for collaboration, job opportunities, consulting, or general inquiries. Messages are saved with a reference ID for follow-uphire_me- Get information about hiring Duyet for various roles - full-time, contract, consulting, or part-time positions. Includes expertise, experience, and next stepssay_hi- Send a friendly greeting to Duyet with an optional personal message. Get contact information and connection links
Management Tools
contact_analytics- Generate analytics reports on contact submissions including summary statistics, purpose breakdown, daily trends, and recent activity patterns
Claude Chat Examples
Here are examples of natural conversation flows using this MCP server:
Learning About Duyet
🧑 User | 🤖 Claude |
Who is Duyet and what does he do? | [accesses |
What has he been writing about lately? | [accesses |
What's he working on currently? | [accesses |
Hiring and Collaboration
🧑 User | 🤖 Claude |
I'm looking to hire a data engineer. Can you help me contact Duyet? | I can send a message to Duyet using the |
It's a full-time position at our startup working with Kafka and Spark | [prepares |
Hi Duyet, we're a Series A startup building real-time data platforms. We'd love to discuss a Senior Data Engineer role — Kafka, Spark, cloud infra, remote-friendly with equity. | [executes |
Technical Research
🧑 User | 🤖 Claude |
I want to understand Duyet's technical background before our interview | [accesses |
Can you show me some of his recent technical work? | [accesses |
What kind of content does he write about? | [accesses |
Natural Discovery Pattern
The key advantage of this MCP server design is that Claude Chat can naturally discover and reference information through resources, making conversations more fluid:
Information Questions → Automatic Resource Access
"Who is Duyet?" →
duyet://about"What's his experience?" →
duyet://cv/detailed"What's he writing about?" →
duyet://blog/posts/3"What's he working on?" →
duyet://github-activity
Action Requests → Interactive Tools
"I want to contact him" →
send_messagetool"Can you send him a greeting?" →
say_hitool"Get his resume" →
get_cvtool
Progressive Disclosure
Start with general questions
Drill down into specific areas
Take actions when ready
Architecture
Framework: Hono.js running on Cloudflare Workers
Database: Cloudflare D1 with Drizzle ORM
Testing: Jest with comprehensive test coverage
Linting: Biome for code quality
Type Safety: TypeScript with strict configuration
License
MIT License - see LICENSE file for details.
Available Tools
8 toolsget_analyticsGet AnalyticsC
Generate analytics reports on contact submissions including summary statistics, purpose breakdown, daily trends, and recent activity patterns
| Name | Required | Description | Default |
|---|---|---|---|
| report_type | No | Type of analytics report to generate | summary |
| date_from | No | Start date for custom period (YYYY-MM-DD format) | |
| date_to | No | End date for custom period (YYYY-MM-DD format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. The description mentions what the tool generates but doesn't disclose behavioral traits like whether it requires authentication, has rate limits, returns data in a specific format, or involves any side effects. For a reporting tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and lists key components. It avoids unnecessary words and gets straight to the point, though it could be slightly more structured by separating usage context from functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (analytics generation with multiple report types) and lack of annotations and output schema, the description is incomplete. It doesn't cover behavioral aspects, return values, or detailed usage scenarios. The description alone is insufficient for an agent to fully understand how to invoke and interpret results from this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description lists report components (summary statistics, purpose breakdown, daily trends, recent activity patterns) that partially map to the 'report_type' enum values, adding some meaning beyond the schema. However, with 100% schema description coverage, the schema already documents all parameters thoroughly. The description doesn't explain parameter interactions (e.g., that 'custom_period' requires date_from/date_to) or add significant semantic depth, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Generate analytics reports on contact submissions' with specific components listed (summary statistics, purpose breakdown, daily trends, recent activity patterns). It uses a specific verb ('Generate') and identifies the resource ('analytics reports on contact submissions'). However, it doesn't distinguish this tool from sibling tools, which are unrelated (blog posts, GitHub activity, hiring, messaging, web operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, appropriate contexts, or exclusions. While sibling tools are unrelated, there's no explicit comparison or usage context provided beyond the basic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blog_post_contentGet Blog Post ContentA
Get the full content of a specific blog post by URL. Extracts article text, title, and metadata (author, publish date, tags) from blog.duyet.net or duyet.net posts.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL of the blog post to retrieve content from (blog.duyet.net or duyet.net) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool does (extracts content and metadata) but lacks details on error handling, rate limits, authentication needs, or output format, leaving gaps in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and efficient with two sentences that directly convey the tool's purpose and scope without any wasted words, making it easy to understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose and domain constraints but lacks details on output structure, error cases, or behavioral traits, which are needed for full contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'url' parameter fully. The description adds minimal value by reiterating the domain constraints but does not provide additional syntax or format details beyond what the schema specifies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get the full content'), resource ('blog post'), and scope ('by URL'), distinguishing it from siblings like web-fetch or web-search by specifying extraction of article text, title, and metadata from specific domains (blog.duyet.net or duyet.net).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use this tool (to extract content from specific blog domains) but does not explicitly mention when not to use it or name alternatives among siblings, such as web-fetch for general URL fetching or web-search for broader searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
github_activityGitHub ActivityB
Get Duyet's recent GitHub activity including commits, issues, pull requests, releases, and other public events
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent activities to retrieve (1-20, default: 5) | |
| include_details | No | Include detailed information like commit messages and issue titles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions retrieving 'recent' activity and 'public events', hinting at read-only and non-destructive behavior, but doesn't clarify aspects like rate limits, authentication needs, data freshness, or what 'recent' means (e.g., time range). For a data retrieval tool with zero annotation coverage, this leaves significant gaps in understanding operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It lists the types of activities included (commits, issues, etc.), which adds useful detail without verbosity. Every part earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose and scope but lacks details on behavioral traits, usage context, and output format. Without annotations or output schema, more guidance on what the tool returns (e.g., structured data vs. raw events) would improve completeness, but it meets a minimum viable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('limit' and 'include_details') well-documented in the schema. The description adds no additional parameter semantics beyond implying retrieval of 'recent' activity, which isn't tied to specific parameters. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract from the schema's clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get Duyet's recent GitHub activity including commits, issues, pull requests, releases, and other public events'. It specifies the verb ('Get'), resource ('GitHub activity'), and scope ('Duyet's recent'), but doesn't explicitly differentiate from sibling tools like 'get_analytics' or 'web-search', which might also retrieve data. The specificity of targeting a particular user's GitHub activity is good but not contrasted with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_analytics' (which might overlap for data retrieval) or 'web-search' (which could search GitHub), nor does it specify prerequisites or exclusions. Usage is implied by the purpose but lacks explicit context for selection among available options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hire_meHire MeC
Get information about hiring Duyet for various roles - full-time, contract, consulting, or part-time positions. Includes expertise, experience, and next steps
| Name | Required | Description | Default |
|---|---|---|---|
| role_type | No | Type of engagement you're interested in | |
| tech_stack | No | Technologies/tools your project uses | |
| company_size | No | Company size/type | |
| contact_email | No | Optional: Your email for follow-up | |
| additional_notes | No | Optional: Additional notes or specific requirements (max 500 characters) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Includes expertise, experience, and next steps' which hints at output content, but lacks details on behavioral traits like response format, data sensitivity, rate limits, or authentication needs. For a tool with personal hiring information and optional contact details, this gap is significant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized with two sentences that efficiently convey purpose and scope. It's front-loaded with the main action and includes relevant details without redundancy. Every sentence adds value, though minor improvements in structure could enhance clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is moderately complete but has gaps. It covers the tool's purpose and hints at output content, but lacks details on behavioral aspects and return values. For a tool with personal data and multiple parameters, more context on usage and results would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing baseline documentation for all 5 parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., no examples or edge cases). With high schema coverage, a score of 3 is appropriate as the description doesn't compensate but doesn't need to heavily.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get information about hiring Duyet for various roles' with specific role types listed. It distinguishes itself from siblings like 'get_analytics' or 'send_message' by focusing on hiring information, though it doesn't explicitly contrast with them. The verb 'Get information' is specific and the resource 'hiring Duyet' is well-defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description implies usage for hiring-related queries but doesn't specify prerequisites, exclusions, or compare it to other tools like 'say_hi' or 'send_message' that might handle communication. Without explicit when/when-not instructions, users must infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
say_hiSay HiC
Send a friendly greeting to Duyet with an optional personal message. Get contact information and connection links
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional personal message to include with the greeting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool will 'get contact information and connection links' which adds useful context about what happens beyond just sending a greeting. However, it doesn't describe important behavioral aspects like whether this is a read-only operation, what format the contact information comes in, whether there are rate limits, authentication requirements, or what happens to the message after sending.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences that each serve distinct purposes: the first explains the core greeting function, the second adds valuable context about additional outcomes. There's no wasted language, though it could be slightly more front-loaded by mentioning the contact information aspect earlier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple greeting tool with one optional parameter and no output schema, the description is adequate but has gaps. It explains what the tool does and adds context about getting contact information, but doesn't describe the return format or what 'contact information and connection links' actually entails. With no annotations and no output schema, more detail about behavioral outcomes would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'optional personal message' which aligns with the single parameter in the schema. Since schema description coverage is 100% (the parameter already has a clear description), the description adds minimal additional value. The baseline score of 3 is appropriate when the schema already documents parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send a friendly greeting to Duyet with an optional personal message. Get contact information and connection links.' It specifies the action (send greeting), target (Duyet), and additional outcomes (get contact info/links). However, it doesn't explicitly differentiate from sibling tools like 'send_message' or 'hire_me' which might have overlapping communication functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when this greeting tool is appropriate compared to 'send_message' (which might be for general messaging) or 'hire_me' (which might be for professional inquiries). There's no indication of prerequisites, timing considerations, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend Message to DuyetB
Send a message to Duyet for collaboration, job opportunities, consulting, or general inquiries. Messages are saved with a reference ID for follow-up
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message to send to Duyet (10-500 characters) | |
| contact_email | No | Optional: Your email for response | |
| purpose | Yes | Purpose of your message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that 'Messages are saved with a reference ID for follow-up', which adds useful context about persistence and tracking. However, it fails to disclose critical behavioral traits such as whether this is a read-only or mutative operation, authentication requirements, rate limits, or error handling. For a tool that likely involves sending data, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, with two sentences that efficiently convey the tool's purpose and key behavioral detail (reference ID). Every sentence earns its place without redundancy or fluff, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a message-sending tool with no annotations and no output schema), the description is incomplete. It lacks details on behavioral aspects (e.g., mutative nature, auth needs), output format (what the reference ID looks like or response structure), and error scenarios. While it covers the basic purpose, it doesn't provide enough context for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add any parameter-specific semantics beyond what the schema provides (e.g., it doesn't explain the 'purpose' enum values or 'message' constraints further). Baseline 3 is appropriate when the schema does the heavy lifting, but no extra value is added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Send') and resource ('message to Duyet'), specifying the action and target. It distinguishes from siblings like 'say_hi' by mentioning specific use cases (collaboration, job opportunities, etc.), though it doesn't explicitly contrast with all siblings. The purpose is well-defined but could be more distinct from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage contexts (collaboration, job opportunities, consulting, general inquiries), providing some guidance on when to use this tool. However, it lacks explicit when-not-to-use scenarios or alternatives (e.g., vs. 'say_hi' or 'hire_me'), leaving room for ambiguity. The guidance is helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web-fetchWeb FetchA
Fetch content from a URL. Supports HTML (extracts text), JSON, and plain text. By default, only allows trusted domains for security. Set allow_any_domain=true to fetch from any URL (use with caution).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to fetch content from | |
| allow_any_domain | No | Allow fetching from any domain (default: false, only trusted domains) | |
| include_headers | No | Include response headers in the output (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: content extraction for HTML (extracts text), support for multiple formats (JSON, plain text), security restrictions (default trusted domains only), and the ability to override security with 'allow_any_domain'. However, it doesn't mention potential rate limits, error handling, or response structure details, leaving some behavioral aspects uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in three sentences that each serve a clear purpose: stating the core function, listing supported formats, and explaining security behavior with a cautionary note. There's no redundant information, and it's appropriately sized for the tool's complexity, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, 100% schema coverage, but no annotations or output schema, the description does well by covering purpose, usage guidelines, and key behaviors. It adequately explains what the tool does and when to use it, though it could benefit from more detail about output format or error cases to be fully complete given the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds some context by explaining the security implications of 'allow_any_domain' ('use with caution') and mentioning content type support, but doesn't provide additional semantic meaning beyond what the schema descriptions already cover for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'fetch' and resource 'content from a URL', specifying the action and target. It distinguishes this tool from siblings like 'web-search' by focusing on direct URL content retrieval rather than search functionality, making the purpose specific and well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool: for fetching content from URLs, with specific content types supported (HTML, JSON, plain text). It also includes a clear cautionary note about the 'allow_any_domain' parameter, advising 'use with caution' for non-trusted domains, which helps the agent understand security implications and appropriate usage contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web-searchWeb SearchA
Search the web for information using DuckDuckGo. Returns titles, URLs, and snippets of search results. Useful for finding current information, articles, documentation, and general web content.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query to look up on the web | |
| max_results | No | Maximum number of results to return (1-10, default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the core behavior (searching via DuckDuckGo and returning results) but lacks details about rate limits, authentication needs, error handling, or whether it's read-only/destructive. The mention of 'current information' hints at real-time capabilities but isn't explicit about freshness or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the action and output, the second provides usage context. Every sentence adds value without redundancy, and it's front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, no output schema), the description is minimally adequate. It covers the purpose and usage but lacks details on output format beyond high-level types, error cases, or operational constraints. Without annotations or output schema, more behavioral context would be helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters ('query' and 'max_results'). The description doesn't add any parameter-specific semantics beyond what's in the schema, such as query formatting tips or result ordering. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Search the web') and resources ('using DuckDuckGo'), and distinguishes it from siblings by specifying it's for web search rather than analytics, blog content, GitHub activity, or other functions. It explicitly mentions what it returns ('titles, URLs, and snippets of search results').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('Useful for finding current information, articles, documentation, and general web content'), which helps differentiate it from siblings like 'web-fetch' (likely for fetching specific URLs) or content-specific tools. However, it doesn't explicitly state when NOT to use it or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v1.0.0- Removed
get_about_duyet - Changed
get_blog_post_content1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"The URL of the blog post to retrieve content from"New value: +"The URL of the blog post to retrieve content from (blog.duyet.net or duyet.net)"
- Removed
get_blog_posts - Removed
get_cv - Removed
get_github_activity - Removed
list_blog_posts - Added
web-fetch - Added
web-search
11 tool updates
- First observed
get_about_duyet - First observed
get_analytics - First observed
get_blog_post_content - First observed
get_blog_posts - First observed
get_cv - First observed
get_github_activity - First observed
github_activity - First observed
hire_me - First observed
list_blog_posts - First observed
say_hi - First observed
send_message
TDQS
Most tools have distinct purposes, such as get_analytics for reports, github_activity for GitHub events, and web-search for web queries. However, send_message and say_hi could be confused as both involve contacting Duyet, though send_message is for formal inquiries and say_hi for greetings. The overlap is minor and clarified by descriptions.
The naming is mixed with snake_case (e.g., get_analytics, github_activity) and kebab-case (web-fetch, web-search), breaking consistency. Verb patterns vary, such as 'get_' for retrieval and 'send_' for actions, but the deviation in case styles reduces predictability. It remains readable but lacks a uniform convention.
With 8 tools, the count is well-scoped for a personal server covering analytics, blog content, GitHub activity, hiring info, messaging, and web utilities. Each tool serves a clear purpose without redundancy, fitting the domain of personal and professional interaction with Duyet.
The tool set covers key areas like analytics, content retrieval, activity tracking, and communication, with no major gaps for its personal server purpose. Minor gaps might include updating or deleting messages, but core workflows (e.g., fetching, searching, contacting) are adequately supported, allowing agents to function effectively.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI agents to query Erick Wendel's talks, blog posts, and videos across different platforms using natural language.427338MIT
- AlicenseAqualityDmaintenanceA flexible Model Context Protocol server that makes documentation or codebases searchable by AI assistants, allowing users to chat with code or docs by simply pointing to a git repository or folder.11789MIT

CodeAlive MCPofficial
AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server that enhances AI agents by providing deep semantic understanding of codebases, enabling more intelligent interactions through advanced code search and contextual awareness.89MIT- -licenseBqualityNot gradedmaintenanceA Model Context Protocol server that enables AI assistants to fetch and understand GitHub repository documentation on-demand from DeepWiki during conversations.3-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/duyet/duyet-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server