Skip to main content
Glama
duyet
by duyet

duyet-mcp-server

CI/CD Pipeline codecov Security

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 mcp add --transport http duyet https://mcp.duyet.net/mcp

Claude Desktop / claude.ai

Settings → Connectors → Add custom connector → https://mcp.duyet.net/mcp

Cursor

Add to ~/.cursor/mcp.json{"mcpServers": {"duyet": {"url": "https://mcp.duyet.net/mcp"}}}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json{"mcpServers": {"duyet": {"serverUrl": "https://mcp.duyet.net/mcp"}}}

VS Code (Copilot)

code --add-mcp '{"name":"duyet","type":"http","url":"https://mcp.duyet.net/mcp"}'

Codex CLI

Add to ~/.codex/config.toml[mcp_servers.duyet] with url = "https://mcp.duyet.net/mcp"

Gemini CLI

gemini mcp add --transport http duyet https://mcp.duyet.net/mcp

Zed

Settings → context_servers{"duyet": {"source": "custom", "url": "https://mcp.duyet.net/mcp"}}

Cloudflare AI Playground

Enter https://mcp.duyet.net/mcp at https://playground.ai.cloudflare.com

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

Deploy to 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 deploy

Customizing 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:

  1. Go to https://playground.ai.cloudflare.com/

  2. Enter your deployed MCP server URL (duyet-mcp-server.<your-account>.workers.dev/sse or duyet-mcp-server.<your-account>.workers.dev/mcp)

  3. 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 experience

  • duyet://cv/{format} - CV/resume with format parameters:

    • duyet://cv/summary - Brief CV overview

    • duyet://cv/detailed - Comprehensive CV information

    • duyet://cv/json - Structured CV data (when available)

Content Resources

  • duyet://blog/posts/{limit} - Latest blog posts from Duyet's technical blog

    • duyet://blog/posts/1 - Latest blog post

    • duyet://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 format

  • get_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-up

  • hire_me - Get information about hiring Duyet for various roles - full-time, contract, consulting, or part-time positions. Includes expertise, experience, and next steps

  • say_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 duyet://about] Duyet is a Data Engineer with 8 years of experience, confident in Data Engineering concepts, best practices and state-of-the-art data and Cloud technologies. Blog: https://blog.duyet.net · CV: https://duyet.net/cv · GitHub: https://github.com/duyet

What has he been writing about lately?

[accesses duyet://blog/posts/3] His latest posts cover data engineering, cloud technologies, and distributed systems. Want details on a specific post?

What's he working on currently?

[accesses duyet://github-activity] Recent GitHub activity shows work on MCP server implementations, data pipeline projects, and open source data engineering tools.

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 send_message tool. What type of opportunity is this?

It's a full-time position at our startup working with Kafka and Spark

[prepares send_message] What would you like to say? I'll note it's a full-time role with Kafka and Spark.

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 send_message] Message sent! Reference ID: abc-123-def. You can also reach Duyet at me@duyet.net, LinkedIn: https://linkedin.com/in/duyet, GitHub: https://github.com/duyet

Technical Research

🧑 User

🤖 Claude

I want to understand Duyet's technical background before our interview

[accesses duyet://cv/detailed] 8 years in data engineering: Apache Spark, Kafka, cloud platforms, distributed systems, scalable data pipelines and the modern data stack.

Can you show me some of his recent technical work?

[accesses duyet://github-activity] Recent contributions include data engineering projects, MCP server implementations, and open source tooling for distributed, cloud-native data systems.

What kind of content does he write about?

[accesses duyet://blog/posts/5] Scalable data pipelines, modern data engineering best practices, cloud technologies, and distributed systems architecture.

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:

  1. Information QuestionsAutomatic 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

  2. Action RequestsInteractive Tools

    • "I want to contact him" → send_message tool

    • "Can you send him a greeting?" → say_hi tool

    • "Get his resume" → get_cv tool

  3. 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 tools
get_analyticsGet AnalyticsC

Generate analytics reports on contact submissions including summary statistics, purpose breakdown, daily trends, and recent activity patterns

ParametersJSON Schema
NameRequiredDescriptionDefault
report_typeNoType of analytics report to generatesummary
date_fromNoStart date for custom period (YYYY-MM-DD format)
date_toNoEnd date for custom period (YYYY-MM-DD format)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL of the blog post to retrieve content from (blog.duyet.net or duyet.net)

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recent activities to retrieve (1-20, default: 5)
include_detailsNoInclude detailed information like commit messages and issue titles

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
role_typeNoType of engagement you're interested in
tech_stackNoTechnologies/tools your project uses
company_sizeNoCompany size/type
contact_emailNoOptional: Your email for follow-up
additional_notesNoOptional: Additional notes or specific requirements (max 500 characters)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNoOptional personal message to include with the greeting

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesMessage to send to Duyet (10-500 characters)
contact_emailNoOptional: Your email for response
purposeYesPurpose of your message

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to fetch content from
allow_any_domainNoAllow fetching from any domain (default: false, only trusted domains)
include_headersNoInclude response headers in the output (default: false)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv1.0.0
    • Removedget_about_duyet
    • Changedget_blog_post_content1 field changed
      • changedInput schema / properties / url / description
        Previous 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)"
    • Removedget_blog_posts
    • Removedget_cv
    • Removedget_github_activity
    • Removedlist_blog_posts
    • Addedweb-fetch
    • Addedweb-search
  2. 11 tool updates
    • First observedget_about_duyet
    • First observedget_analytics
    • First observedget_blog_post_content
    • First observedget_blog_posts
    • First observedget_cv
    • First observedget_github_activity
    • First observedgithub_activity
    • First observedhire_me
    • First observedlist_blog_posts
    • First observedsay_hi
    • First observedsend_message

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    1
    17
    89
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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.
    89
    MIT
  • -
    license
    B
    quality
    Not graded
    maintenance
    A 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

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