Skip to main content
Glama
nimbuswsj

mailplug-jandi-mcp

by nimbuswsj

Mailplug JANDI MCP

Mailplug 메일 워크플로우와 JANDI 알림을 연결하기 위한 TypeScript MCP scaffold입니다. 현재 구현은 stdio MCP server와 Streamable HTTP backend를 함께 제공합니다. 실제 Mailplug POP3/SMTP 연동과 JANDI 인증 정보는 나중에 로컬 또는 서버 .env에서 설정하도록 의도적으로 비워 두었습니다.

현재 범위

  • @modelcontextprotocol/sdk@1.29.0 기반 MCP stdio server.

  • Apache reverse proxy 뒤에서 사용할 Streamable HTTP backend (/mcp, /health).

  • MVP에서 사용할 tool 이름:

    • mailplug_list_recent

    • jandi_build_message

    • jandi_send_message

  • JANDI Incoming Webhook payload builder와 sender.

  • Mailplug 인증 정보와 POP3 동작 방식이 확정되기 전까지 빈 목록을 반환하는 placeholder recent-message tool.

  • mcp.nimbustech.co.kr용 Apache vhost 예시. 원격 적용은 별도 승인 후 진행합니다.

Related MCP server: MCP Webhook Server

설정

npm install
cp .env.example .env
npm run check
npm run build

.env, 실제 webhook URL, Mailplug app password, token, certificate path, secret은 commit하지 마세요.

환경 변수

Variable

Purpose

MAILPLUG_EMAIL

향후 POP3/SMTP 연동에 사용할 Mailplug mailbox address.

MAILPLUG_APP_PASSWORD

향후 POP3/SMTP 연동에 사용할 Mailplug app password.

MAILPLUG_POP3_HOST

기본값은 pop3.mailplug.co.kr.

MAILPLUG_POP3_PORT

기본값은 995.

MAILPLUG_SMTP_HOST

기본값은 smtp.mailplug.co.kr.

MAILPLUG_SMTP_PORT

기본값은 465.

JANDI_WEBHOOK_URL

JANDI Incoming Webhook URL. 로컬 .env에만 입력합니다.

MCP_PUBLIC_URL

Public URL, https://mcp.nimbustech.co.kr/mcp.

MCP_HTTP_PORT

Streamable HTTP backend port, 현재 8710.

개발 명령어

npm run dev       # 로컬 stdio MCP server 실행
npm run dev:http  # 로컬 Streamable HTTP backend 실행
npm test          # unit test 실행
npm run typecheck # TypeScript 검사만 실행
npm run build     # dist/ 출력
npm run check     # typecheck + tests

배포 문서

이 repo가 재현 가능한 배포 절차와 운영 문서의 source of truth입니다. 서버에는 live runtime file, secret, 그리고 배포 commit, enabled service, certificate 상태, 승인된 host-specific deviation 같은 non-secret live-state note만 둡니다.

  • docs/deployment.md는 target server shape, 필요한 operator input, preflight check, HTTP/vhost 절차를 문서화합니다.

  • docs/runbook.md는 운영 점검, troubleshooting command, DNS check, secret handling, rollback을 문서화합니다.

  • docs/auth-credential-plan.md는 public /mcp HTTPS 노출 전 필요한 multi-user auth, per-user credential routing, secret storage 요구사항을 문서화합니다.

  • docs/mcp-tooling-notes.md는 MCP SDK, registerTool, Zod schema, agent-facing tool metadata 작성 원칙을 문서화합니다.

  • deploy/apache/에는 Apache 예시가 있습니다.

  • deploy/systemd/에는 systemd 예시가 있습니다.

mcp.nimbustech.co.kr의 DNS target은 49.247.207.165입니다. 변경 직후 resolver별 propagation/cache 지연이 있을 수 있습니다. DNS, certificate 발급, systemd 설치, Apache reload, 배포 타이밍이 명시적으로 승인되기 전까지 live server config를 적용하지 마세요. Public /mcp HTTPS 노출은 docs/auth-credential-plan.md의 auth와 per-user credential routing 요구사항이 구현될 때까지 차단합니다. nimbus에 live-state note가 필요하면 /opt/mailplug-jandi-mcp/DEPLOYMENT_STATE.md에 server-local로 두고 모든 secret은 제외합니다.

Available Tools

3 tools
jandi_build_messageBuild JANDI webhook payloadB

Build a JANDI Incoming Webhook payload without sending it.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
colorNo
fieldsNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for disclosing behavioral traits. It only states the core action (build payload, no sending) but does not mention side effects, idempotency, permissions, or rate limits. This leaves significant gaps.

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, effective sentence that front-loads the action. No unnecessary words.

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 no output schema and no annotations, the description should provide a more complete picture. It fails to indicate what the tool returns or any prerequisites. The tool is simple but the description is overly minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no additional information about the parameters beyond their names. An agent has no guidance on expected formats, constraints, or how to use 'color' and 'fields'.

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 tool's purpose: building a JANDI Incoming Webhook payload without sending it. It distinguishes itself from the sibling 'jandi_send_message' which presumably sends the payload.

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?

The phrase 'without sending it' implicitly guides when to use this tool versus the sibling 'jandi_send_message'. However, it does not elaborate on other usage contexts or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jandi_send_messageSend JANDI webhook messageC

Send a message to the configured JANDI Incoming Webhook URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
colorNo
fieldsNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description lacks behavioral details such as side effects, idempotency, or permissions. With no annotations provided, the description carries full responsibility but only states the basic function without disclosing important traits like whether the message is sent immediately or queued.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but at the cost of completeness. It does not waste words, but it also fails to provide essential information about parameters or behavior.

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 of three parameters (including nested objects) and no output schema or annotations, the description is too brief to be complete. It omits return values, error conditions, and parameter purpose, leaving significant gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any of the three parameters (body, color, fields), despite 0% schema description coverage. The agent receives no help understanding what 'color' or 'fields' mean in context, relying solely on the schema structure.

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 action ('Send') and the target resource ('message to the configured JANDI Incoming Webhook URL'), distinguishing it from the sibling tool jandi_build_message, which likely constructs messages. The purpose is unambiguous.

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 its siblings or alternatives. It does not mention prerequisites, exclusions, or typical use cases, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mailplug_list_recentList recent Mailplug messagesC

Placeholder tool for future POP3-based Mailplug ingestion.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description only says it's a placeholder for future POP3-based ingestion. It does not disclose what currently happens (e.g., returns an error, empty list), leaving behavior completely opaque.

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 sentence, front-loaded with the placeholder status. It is efficient but could be slightly more informative about the intended future behavior.

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 placeholder tool with no parameters or output schema, the description is adequate in stating its placeholder nature. However, it lacks completeness for an agent to understand what to expect if invoked now.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is vacuously 100%. The description adds no parameter info, which is acceptable as there are none. Baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'List recent Mailplug messages' but then says it's a placeholder for future ingestion, creating ambiguity about current functionality. It is adequate but not fully clear due to the placeholder caveat.

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 on when to use this tool versus alternatives. Sibling tools are for a different platform (Jandi), but no context is given for when to invoke this placeholder.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

C2.8/5.0
Disambiguation4/5

The three tools cover distinct functions: building a JANDI message payload, sending that payload, and a placeholder for Mailplug email ingestion. The first two are complementary and clearly separated; the third is a different domain, though not yet implemented.

Naming Consistency2/5

Tool names are inconsistent: the first two use 'jandi_' prefix with verb_noun pattern, while the third uses 'mailplug_' with a different verb_noun style. This mixing of conventions and prefixes makes the set feel disjointed.

Tool Count3/5

With only 3 tools, the server is relatively thin but not unreasonably so given its dual purpose. However, the Mailplug part is represented by a single placeholder tool, making the count feel incomplete.

Completeness2/5

The JANDI messaging tools cover the core workflow of building and sending a message, but the Mailplug email ingestion is only a placeholder, leaving a significant gap in functionality for that domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server that enables sending data to webhooks via HTTP POST for both local and remote team environments. It provides a tool for relaying task descriptions, custom metadata, and automated notifications to external services.
    4
  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that enables users to interact with their Naver Mail account via the Model Context Protocol. It allows for seamless mail integration and management within MCP-compatible clients like Claude Desktop.
    16
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for interacting with the official Meta WhatsApp Business Platform/Cloud API, enabling sending messages, managing contacts, templates, and handling webhook callbacks.
    Apache 2.0

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/nimbuswsj/mailplug-jandi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server