Skip to main content
Glama
yoyojyv

Medium MCP Server

by yoyojyv

Medium MCP Server

Medium 블로그 글을 읽어오는 Model Context Protocol (MCP) 서버입니다.

AI 어시스턴트(Claude, ChatGPT 등)가 Medium 글의 내용을 직접 읽고 분석할 수 있도록 해줍니다.

⚠️ Disclaimer / 면책 조항

이 도구는 교육 및 개인 학습 목적으로만 제공됩니다.

  • 이 프로젝트는 Medium 이용약관(ToS)을 위반할 수 있습니다

  • 사용자는 관련 법률 준수에 대한 전적인 책임을 집니다

  • 저작자는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다

  • 상업적 목적이나 대량 데이터 수집에 사용하지 마세요

사용에 따른 모든 위험은 사용자 본인에게 있습니다.

Features

  • Medium 글 URL에서 콘텐츠 추출

  • Author 글 목록: 특정 Author의 글 목록 조회 (RSS/스크래핑)

  • 검색 기능: Medium 전체 검색 및 Author 내 검색

  • Playwright 헤드리스 브라우저로 동적 콘텐츠 처리

  • Mozilla Readability로 본문만 깔끔하게 추출

  • Markdown 형식으로 변환하여 반환

  • 로그인 지원: Medium 멤버십 전용 콘텐츠 접근 가능

Related MCP server: Medium MCP Server

빠른 시작 가이드

설치 후 Claude에게 이렇게 말해보세요:

📖 글 읽기 & 번역

이 글 내용을 한글로 번역해줘: https://medium.com/@username/article-title
이 Medium 글을 요약해줘: https://towardsdatascience.com/some-article

🔍 분석 & 질문

이 글의 핵심 포인트 3가지를 정리해줘: [Medium URL]
이 기술 블로그에서 설명하는 개념을 초보자도 이해할 수 있게 설명해줘: [Medium URL]

📋 Author 글 목록 & 검색

@springrod 의 글 목록을 보여줘
@username 의 글 중에서 "AI agent" 관련 글을 찾아줘
Medium에서 "React hooks" 관련 글을 검색해줘

🔐 멤버십 글 읽기 (로그인 필요)

Medium에 로그인해줘
→ (브라우저에서 로그인 완료 후)
로그인 세션 저장해줘
→ 이제 멤버십 전용 글도 읽을 수 있어요!

➕ 새 도메인 추가

stackademic.com 도메인 추가해줘
→ 이제 stackademic.com 글도 읽을 수 있어요!

: URL만 붙여넣고 원하는 작업을 자연스럽게 요청하세요. Claude가 알아서 글을 읽고 처리합니다.

지원 도메인

기본 도메인

  • medium.com

  • *.medium.com (사용자 서브도메인)

  • towardsdatascience.com

  • betterprogramming.pub

  • levelup.gitconnected.com

  • uxdesign.cc

  • eand.co

  • betterhumans.pub

  • writingcooperative.com

커스텀 도메인 추가

새로운 Medium 파트너 도메인(예: stackademic.com)을 추가할 수 있습니다:

방법 1: MCP 도구 사용

도메인 추가해줘: stackademic.com

방법 2: 설정 파일 편집

// ~/.medium-mcp/config.json
{
  "additionalDomains": ["stackademic.com", "blog.example.com"]
}

방법 3: 환경변수 설정 (MCP 클라이언트 설정에서)

{
  "mcpServers": {
    "medium": {
      "command": "node",
      "args": ["/절대/경로/medium-mcp-server/dist/index.js"],
      "env": {
        "MEDIUM_ADDITIONAL_DOMAINS": "stackademic.com,another.com"
      }
    }
  }
}

설치

1. 저장소 클론

git clone https://github.com/yoyojyv/medium-mcp-server.git
cd medium-mcp-server

2. 의존성 설치

npm install

3. Playwright 브라우저 설치

npx playwright install chromium

4. 빌드

npm run build

사용 방법

Claude Desktop에서 사용

claude_desktop_config.json 파일에 다음을 추가합니다:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "medium": {
      "command": "node",
      "args": ["/절대/경로/medium-mcp-server/dist/index.js"]
    }
  }
}

Cursor에서 사용

Cursor 설정의 MCP 섹션에 추가:

{
  "mcpServers": {
    "medium": {
      "command": "node",
      "args": ["/절대/경로/medium-mcp-server/dist/index.js"]
    }
  }
}

직접 테스트

# tools 목록 확인
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | node dist/index.js

제공 Tools

read_article

Medium 글 URL에서 콘텐츠를 추출합니다.

입력:

파라미터

타입

필수

설명

url

string

O

Medium 글 URL

출력:

{
  "title": "글 제목",
  "author": "작성자",
  "publishedAt": "2025-12-15T00:00:00Z",
  "content": "# 글 제목\n\n본문 내용 (Markdown)...",
  "excerpt": "글 요약",
  "url": "https://medium.com/..."
}

사용 예시 (Claude에서):

이 Medium 글을 읽고 요약해줘: https://medium.com/@username/article-title-123abc

login

Medium 로그인을 위한 브라우저 창을 엽니다. 멤버십 전용 콘텐츠에 접근하려면 로그인이 필요합니다.

사용 예시:

Medium에 로그인해줘

브라우저 창이 열리면 직접 로그인을 완료하세요.


save_login

로그인 완료 후 세션을 저장합니다. login 실행 후 사용합니다.

사용 예시:

로그인 세션을 저장해줘

세션은 ~/.medium-mcp/auth.json에 저장됩니다.


login_status

현재 로그인 상태를 확인합니다.

출력:

{
  "loggedIn": true,
  "storagePath": "/Users/username/.medium-mcp/auth.json",
  "message": "You are logged in. Member-only content should be accessible."
}

logout

저장된 로그인 세션을 삭제합니다.

사용 예시:

Medium에서 로그아웃해줘

add_domain

커스텀 Medium 파트너 도메인을 추가합니다.

입력:

파라미터

타입

필수

설명

domain

string

O

추가할 도메인 (예: stackademic.com)

사용 예시:

stackademic.com 도메인 추가해줘

추가된 도메인은 ~/.medium-mcp/config.json에 저장됩니다.


list_domains

현재 지원되는 모든 도메인 목록을 조회합니다.

출력:

{
  "defaultDomains": ["medium.com", "towardsdatascience.com", ...],
  "customDomains": ["stackademic.com"],
  "allDomains": ["medium.com", ..., "stackademic.com"],
  "configPath": "/Users/username/.medium-mcp/config.json"
}

사용 예시:

지원되는 도메인 목록 보여줘

remove_domain

커스텀 도메인을 제거합니다. 기본 도메인은 제거할 수 없습니다.

입력:

파라미터

타입

필수

설명

domain

string

O

제거할 도메인

사용 예시:

stackademic.com 도메인 제거해줘

list_author_articles

특정 Author의 글 목록을 가져옵니다.

입력:

파라미터

타입

필수

설명

username

string

O

Medium username (@ 없이)

source

string

X

rss (기본, 빠름) 또는 scrape (더 많은 글)

limit

number

X

최대 글 개수 (scrape 모드에서만 적용, 기본 10)

keyword

string

X

키워드 필터링

출력:

{
  "username": "springrod",
  "articleCount": 10,
  "articles": [
    {
      "title": "글 제목",
      "url": "https://medium.com/@springrod/...",
      "publishedAt": "Mon, 22 Dec 2025 08:25:33 GMT",
      "categories": ["genai", "java", "ai-agent"],
      "content": "전체 HTML 콘텐츠 (RSS 모드에서만)"
    }
  ],
  "source": "rss",
  "hasMore": true
}

사용 예시:

@springrod 의 글 목록을 보여줘
@username 의 최근 글 20개를 스크래핑으로 가져와줘

search_articles

Medium 전체에서 글을 검색합니다. (Playwright 스크래핑 사용)

입력:

파라미터

타입

필수

설명

query

string

O

검색어

limit

number

X

최대 결과 개수 (기본 10)

출력:

{
  "query": "AI agent java",
  "resultCount": 5,
  "results": [
    {
      "title": "글 제목",
      "url": "https://medium.com/...",
      "author": "작성자",
      "excerpt": "글 요약"
    }
  ],
  "hasMore": true
}

사용 예시:

Medium에서 "React hooks" 관련 글을 검색해줘

참고: 스크래핑 방식이므로 봇 탐지로 차단될 수 있습니다.


search_author_articles

특정 Author의 글 중에서 키워드로 검색합니다. (RSS 피드 기반)

입력:

파라미터

타입

필수

설명

username

string

O

Medium username (@ 없이)

keyword

string

O

검색할 키워드

출력:

{
  "username": "springrod",
  "keyword": "agent",
  "matchCount": 8,
  "articles": [...],
  "note": "Search is limited to author's ~10 most recent articles from RSS feed"
}

사용 예시:

@springrod 의 글 중에서 "agent" 관련 글을 찾아줘

멤버십 콘텐츠 접근 방법

Medium 멤버십 전용 글을 읽으려면:

  1. 로그인 시작: "Medium에 로그인해줘" 라고 요청

  2. 브라우저에서 로그인: 열린 브라우저 창에서 Medium 계정으로 로그인

  3. 세션 저장: "로그인 세션을 저장해줘" 라고 요청

  4. 글 읽기: 이제 멤버십 전용 글도 읽을 수 있습니다

중요: 로그인 시 이메일 기반 인증을 사용하세요. Google/Apple/Facebook 등 OAuth 인증은 Playwright 환경에서 정상 작동하지 않을 수 있습니다.

Claude Desktop 사용 예시

Claude Desktop에서 Medium MCP 로그인 플로우

# 예시 대화
사용자: Medium에 로그인해줘
Claude: 브라우저가 열렸습니다. 로그인을 완료한 후 알려주세요.

사용자: 로그인 완료했어. 세션 저장해줘
Claude: 로그인 세션이 저장되었습니다.

사용자: 이 글 읽어줘: https://medium.com/membership-only-article
Claude: (멤버십 전용 글 내용 표시)

개발

개발 모드 실행

npm run dev

빌드

npm run build

프로젝트 구조

src/
├── index.ts              # 진입점
├── server.ts             # MCP 서버 설정
├── config/
│   ├── constants.ts      # 도메인 목록, 타임아웃 설정
│   └── settings.ts       # 설정 파일 관리
├── tools/
│   ├── read-article.ts   # read_article Tool
│   ├── auth.ts           # 로그인 관련 Tools
│   ├── domains.ts        # 도메인 관리 Tools
│   ├── author-articles.ts # list_author_articles Tool
│   └── search.ts         # search_articles, search_author_articles Tools
├── services/
│   ├── article-extractor.ts  # Playwright + Readability
│   ├── rss-feed.ts           # RSS 피드 파싱
│   ├── author-scraper.ts     # Author 페이지 스크래핑
│   └── search-scraper.ts     # 검색 페이지 스크래핑
├── types/
│   ├── article.ts            # Article 타입
│   ├── author-article.ts     # AuthorArticle 타입
│   └── search-result.ts      # SearchResult 타입
└── utils/
    ├── errors.ts         # 에러 클래스
    ├── logger.ts         # 로깅
    └── response.ts       # 응답 포맷

설정 파일 위치

파일

경로

설명

로그인 세션

~/.medium-mcp/auth.json

Playwright 인증 상태

사용자 설정

~/.medium-mcp/config.json

커스텀 도메인 등

기술 스택

  • TypeScript - 타입 안전성

  • @modelcontextprotocol/sdk - MCP 서버 구현

  • Playwright - 헤드리스 브라우저

  • @mozilla/readability - 콘텐츠 추출

  • Turndown - HTML → Markdown 변환

  • Zod - 스키마 검증

  • rss-parser - RSS 피드 파싱

제한사항

  • Paywall 콘텐츠는 로그인 후 접근 가능

  • 과도한 요청 시 Rate limiting 가능성

  • Playwright 브라우저 설치 필요 (~300MB)

라이선스

MIT

Available Tools

11 tools
add_domainAdd Medium DomainA

Add a custom Medium partner domain to the allowed list. The domain will be saved to config file.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to add (e.g., stackademic.com, blog.example.com)

TDQS

A4/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 behavioral disclosure burden. It does add the useful detail that the domain 'will be saved to config file', indicating persistence. However, it omits other behavioral aspects such as authentication requirements, duplicate handling, or whether the operation overwrites existing config entries.

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 exactly two sentences, front-loaded with the primary action and followed by a relevant side-effect note. Every word contributes to understanding the tool, with no redundancy or fluff.

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 simple one-parameter tool, the description covers the essential operation and persistent effect. It does not mention return values or error/duplicate behavior, but the low complexity and clear intent make it sufficiently complete for an agent to select and invoke the tool correctly.

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 input schema already fully describes the single parameter 'domain' with examples (e.g., stackademic.com). The description adds no extra parameter semantics, but with 100% schema coverage, the baseline of 3 is appropriate.

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 ('Add a custom Medium partner domain') and the target resource ('allowed list'), with a specific scope ('custom Medium partner domain'). This distinguishes it from sibling tools like 'remove_domain' and 'list_domains', making the purpose immediately obvious.

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 description provides clear context for using the tool: adding a domain to the allowed list. It does not explicitly mention when not to use it or name alternative tools, but the purpose is unambiguous and naturally separates it from removal/listing operations.

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

list_author_articlesList Author ArticlesA

Get a list of articles from a Medium author. Uses RSS feed by default (fast, ~10 recent articles with full content). Use source='scrape' for more articles (slower, may trigger bot detection).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of articles (only applies to scrape mode)
sourceNoData source: 'rss' (fast, limited to ~10 recent) or 'scrape' (more articles, slower)rss
keywordNoFilter articles by keyword in title, excerpt, or tags
usernameYesMedium username (without @ prefix)

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 and does well by disclosing default behavior (RSS), approximate result count (~10 recent articles), full content availability, and potential bot detection with scraping. It could add more on return format or edge cases, but the disclosed traits are valuable.

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 two concise sentences, front-loaded with the primary action and followed by essential source-selection guidance. Every sentence earns its place without redundancy.

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 four parameters, no output schema, and no annotations, the description covers the core usage and behavioral trade-offs. It does not explicitly explain the keyword filtering or limit behavior, but the schema covers those details, so the description is adequately complete for typical use.

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?

Schema coverage is 100%, so the baseline is 3. The description adds meaning to the 'source' parameter by explaining its practical trade-offs (fast vs. slower, risk of bot detection) beyond the enum descriptions, and clarifies that the default RSS mode provides full article content.

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 it retrieves articles from a Medium author, with a specific verb ('Get a list') and resource ('articles from a Medium author'). It differentiates from sibling tools like search_author_articles and read_article by its listing scope and source options.

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 description provides clear context on choosing between RSS and scrape sources, including trade-offs in speed, article count, and bot detection risk. However, it does not explicitly mention when to use this tool over sibling alternatives like search_author_articles, so it lacks explicit exclusions.

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

list_domainsList Medium DomainsA

Show all allowed Medium domains (default + custom + environment)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses that the list includes default, custom, and environment domains, adding useful context beyond 'list domains'. However, it does not mention authentication requirements, return format, or whether the list is ordered or filtered by user.

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 concise sentence that is front-loaded with the action ('Show all allowed Medium domains') and includes parenthetical scope details. No wasted words.

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 zero-parameter, no-output-schema tool, the description is complete enough for the agent to understand its basic purpose. It specifies the domain categories, making the tool distinct from any hidden variants. A bit more detail on return value or behavior when no domains exist would have made it fully complete.

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?

This tool has zero parameters, so the description does not need to explain parameter meanings. The baseline of 4 applies as the description is not required to compensate for schema gaps.

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?

Description clearly states the tool lists all allowed Medium domains, specifying the scope (default, custom, environment). This distinguishes it from sibling tools like add_domain and remove_domain which perform mutations.

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 description implies this is the read-only counterpart to add_domain/remove_domain, making the usage context clear. However, it does not explicitly state when to prefer this over other tools or provide exclusion criteria.

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

loginLogin to MediumA

Open a browser window to log in to Medium. After logging in, use 'save_login' to save your session for accessing member-only content.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/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. It discloses that the tool opens a browser window and that session persistence requires a separate save_login call, which is useful. However, it does not explain what happens on successful login, how failures are handled, whether it checks for an existing session, or what the return value is. Given the lack of annotations, more behavioral detail is expected.

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 exactly two sentences: the first states the core action, the second provides a follow-up action in context. There is zero fluff, and the information is front-loaded. Every sentence earns its place.

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 no parameters, no output schema, and no annotations, the description covers the essential context: what it does, when to call it, and what to do next. It omits edge cases (e.g., already logged in, login failure), but given the simplicity of the tool, the description is nearly complete. Sibling tools like login_status may cover additional context.

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?

The schema defines zero parameters, so schema coverage is trivially 100%. The baseline for 0 parameters is 4, and the description correctly avoids adding unnecessary parameter details. There is nothing to explain about parameters, so a 4 is appropriate.

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 opens a browser window to log in to Medium, using a specific verb+resource construction. It distinguishes from sibling tools like save_login and logout by explicitly positioning login as the initial authentication step, and it mentions save_login as a follow-up, which helps disambiguate.

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 description provides clear workflow guidance: 'After logging in, use save_login...' indicates when to use login versus save_login. It also implies that login is a prerequisite for member-only content. It lacks explicit exclusions (e.g., 'do not use if already logged in'), but the mention of save_login and the login context gives sufficient direction.

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

login_statusCheck Login StatusA

Check if you are currently logged in to Medium.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/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. The word 'check' suggests a read-only operation, but the description does not disclose whether it makes a network call, returns a boolean, or how it handles an unauthenticated state. This is minimal but not misleading.

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 sentence with no redundant information. Every word contributes to the meaning, achieving maximum conciseness.

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?

Given the tool's simplicity (zero parameters, no output schema, no nested objects), the description adequately covers the essential context. It might be enhanced by explicitly noting the return type, but it is not necessary for basic invocation.

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?

The tool has zero parameters, which receives a baseline score of 4 per the rubric. There is no need for parameter-level detail; the schema validation is trivially satisfied.

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 ('Check') and the specific resource ('login status'), distinguishing it from sibling tools like 'login' and 'logout' that perform mutations. It concisely identifies the tool's role as a status query.

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 context (checking authentication state) but does not explicitly state when to use this tool versus alternatives such as 'login' or 'logout'. The sibling list provides some context, but no direct exclusionary guidance is given.

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

logoutLogout from MediumA

Clear the saved Medium login session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of disclosure. It clearly states the effect (clearing the session) but doesn't mention irreversibility, side effects, or what happens if no session exists. It provides the main behavior but lacks additional 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 a single, concise sentence that directly states the action. It is front-loaded and contains no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no params, no annotations, no output schema), the description is complete enough for an agent to understand what the tool does and when to invoke it. The core behavior is clearly and sufficiently described.

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?

The tool has zero parameters, so the description naturally doesn't need to explain parameter meanings. The baseline for 0 params is 4, and the description adds no confusing or missing parameter information.

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 uses the specific verb 'clear' and identifies the resource as 'the saved Medium login session,' making the action unambiguous. It also distinguishes from sibling tools like login and save_login by explicitly addressing session termination.

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 the tool's purpose but doesn't explicitly state when to use it vs alternatives. It doesn't mention prerequisites such as being logged in or contrast with login_status, leaving the when-to-use guidance implicit.

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

read_articleRead Medium ArticleA

Read and extract content from a Medium article URL. Returns the article title, author, content in Markdown format, and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesMedium article URL to read

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden. It clearly indicates a read operation ('Read and extract content') and lists expected outputs (title, author, content, metadata), but does not disclose potential edge cases, authentication requirements, or error behavior. While not misleading, it lacks depth.

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 concise (one sentence) and front-loaded with the primary action. Every word contributes meaning, directly stating the tool's function and return value.

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 simple read tool with one parameter and no output schema, the description adequately covers what the tool does and what it returns. It could be slightly more detailed about the exact metadata or error handling, but it is sufficient for the tool's complexity.

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 input schema already describes the single parameter (url) with 100% coverage. The description repeats 'Medium article URL' but adds no new semantic detail. Baseline score of 3 is appropriate since schema handles the meaning.

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: 'Read and extract content from a Medium article URL.' It specifies the action (read/extract) and the resource (Medium article URL), and distinguishes itself from sibling tools like search_articles or list_author_articles by focusing on a single URL's content.

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 when you have a specific Medium article URL to read, but does not explicitly state when to use this tool versus alternatives like search_articles or list_author_articles. No exclusions or alternative guidance is provided.

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

remove_domainRemove Custom DomainA

Remove a custom domain from the allowed list. Cannot remove default domains.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to remove

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description discloses an important behavior ('Cannot remove default domains') beyond the schema. However, it does not explain what happens when attempting to remove a default domain or other side effects, leaving some behavioral 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?

Two short sentences, front-loaded with the verb and resource, and no redundant information. Every word adds value.

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 simple one-parameter mutation tool, the description covers the core behavior and an important constraint. It could mention error handling or preconditions, but the simplicity of the tool makes this adequate.

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 covers the 'domain' parameter with a description, and coverage is 100%. The tool description adds context ('custom domain', 'allowed list') but no additional meaning about the parameter format or validation, so baseline 3 is appropriate.

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?

Description clearly states 'Remove a custom domain from the allowed list' – specific verb and resource. The additional constraint 'Cannot remove default domains' adds precision and distinguishes this from sibling tools like add_domain and list_domains.

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?

Provides clear context for when to use (removing custom domains) and an exclusion ('Cannot remove default domains'), but does not explicitly mention alternative tools. The context is clear enough for an AI agent to select this tool for removal tasks.

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

save_loginSave Login SessionA

Save the current login session after completing login in the browser. Must be called after 'login' tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It does not explain side effects, what happens if called prematurely, error behavior, or whether the session save is idempotent. This leaves an agent uncertain about the tool's full behavior.

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?

Two short sentences, front-loaded with the action, and no wasted words. It is appropriately sized for the tool's simplicity.

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 simple zero-param, no-output tool, the description covers the essential action and a required precondition. It could mention return values or failure modes, but given the context, it is adequately complete.

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?

The input schema has zero parameters, so the description needs no parameter detail. The zero-parameter baseline of 4 is appropriate, and no additional explanation is required.

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 uses a specific verb 'save' and clearly identifies the resource ('current login session'), and the explicit dependency on the 'login' tool distinguishes it from siblings like login and logout.

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 explicitly states a mandatory precondition ('Must be called after login tool'), giving clear temporal guidance. It does not discuss alternatives, but for a zero-parameter persistence step this is adequate contextual guidance.

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

search_articlesSearch ArticlesA

Search for articles across all of Medium. Uses web scraping (may trigger bot detection).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results
queryYesSearch query

TDQS

A4.2/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 explicitly reveals the web scraping mechanism and the risk of bot detection, which is valuable beyond the simple search action. It does not mention potential errors or response format, but the disclosed risk is a significant transparency credit.

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 two sentences, with the primary purpose in the first sentence and a critical caveat in the second. It is compact, front-loaded, and every sentence adds necessary information.

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?

The tool is relatively simple with two parameters and no output schema. The description covers the search scope and the scraping risk, but does not specify return format or failure behavior if bot detection triggers. This is a minor gap, so 4 reflects a mostly complete but not exhaustive description.

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 input schema fully describes both parameters (query and limit) with descriptions and constraints. The tool description adds no additional semantic information about the parameters, so the baseline score of 3 is appropriate.

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 searches for articles across all of Medium, using a specific verb and resource scope. This distinguishes it from the sibling search_author_articles, which implies an author-specific search.

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 broad scope ('across all of Medium') implicitly indicates when to use this tool, but no alternative tools are explicitly mentioned. The bot detection warning adds a cautionary usage note, though without explicit exclusions or when-not-to-use guidance.

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

search_author_articlesSearch Author ArticlesA

Search for articles within a specific author's posts. Uses RSS feed (fast, limited to ~10 recent articles).

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYesKeyword to search for
usernameYesMedium username (without @ prefix)

TDQS

A4.2/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 burden of disclosing behavioral traits. It discloses that the tool uses an RSS feed, is fast, and only accesses approximately 10 recent articles. This is valuable information about limitations and performance. It does not mention return format or error cases, but for a simple search tool this is adequate.

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 two concise sentences. The first states the primary purpose, and the second provides a key limitation. No filler or redundant information, making it optimally front-loaded and easy to parse.

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 2 params and no output schema, the description covers the core behavior and a critical limitation (RSS feed scope). It could benefit from stating what the tool returns, but given the straightforward nature of a search (returning matching articles), the description is largely sufficient. The absence of output schema means some return info would be helpful, but it is not a critical gap.

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 input schema already provides full descriptions for both parameters ('Keyword to search for' and 'Medium username (without @ prefix)'), achieving 100% schema coverage. The tool description adds no additional parameter semantics beyond restating the purpose, so the baseline score of 3 is appropriate.

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 function: 'Search for articles within a specific author's posts.' It uses a specific verb (search) and resource (articles within an author's posts), which distinguishes it from sibling tools like search_articles (general search) and list_author_articles (listing without a keyword). The RSS feed limitation adds further specificity.

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 description provides clear context on when to use the tool: for searching within a specific author's posts. The mention of 'RSS feed (fast, limited to ~10 recent articles)' implicitly warns against using it for comprehensive or older article searches, though it does not explicitly name alternatives. This is more than implied usage, but lacks explicit exclusions.

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. 11 tool updatesv1.2.0
    • First observedadd_domain
    • First observedlist_author_articles
    • First observedlist_domains
    • First observedlogin
    • First observedlogin_status
    • First observedlogout
    • First observedread_article
    • First observedremove_domain
    • First observedsave_login
    • First observedsearch_articles
    • First observedsearch_author_articles

TDQS

A4.1/5.0
Disambiguation4/5

Most tools target distinct actions (login, domain management, reading, searching). The only potential confusion is between search_author_articles and list_author_articles, but descriptions clarify search (query within author) versus list (full article list). All others are clearly separated by resource and action.

Naming Consistency4/5

Tool names follow a consistent snake_case verb_noun pattern (e.g., search_articles, add_domain, remove_domain). The only deviation is 'login_status', which uses a noun phrase rather than a verb, but it is still readable and predictable. No mixed casing or chaotic naming.

Tool Count5/5

Eleven tools is well-scoped for a Medium server that handles authentication, article retrieval, author queries, and domain configuration. Each tool covers a distinct feature area without redundancy or bloat.

Completeness4/5

The server provides solid coverage for reading and searching Medium content, including member-only access via login. Missing writing/publishing and comment features, but these appear out of scope. The domain management tools are a bit niche but complete for their purpose.

Maintenance

ActivityInactive
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

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/yoyojyv/medium-mcp-server'

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