Medium MCP Server
Allows reading Medium articles, searching Medium, listing author articles, and accessing member-only content with login support.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Medium MCP Serverlist articles by @springrod"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.combetterprogramming.publevelup.gitconnected.comuxdesign.cceand.cobetterhumans.pubwritingcooperative.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-server2. 의존성 설치
npm install3. Playwright 브라우저 설치
npx playwright install chromium4. 빌드
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-123abclogin
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 |
|
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 멤버십 전용 글을 읽으려면:
로그인 시작: "Medium에 로그인해줘" 라고 요청
브라우저에서 로그인: 열린 브라우저 창에서 Medium 계정으로 로그인
세션 저장: "로그인 세션을 저장해줘" 라고 요청
글 읽기: 이제 멤버십 전용 글도 읽을 수 있습니다
중요: 로그인 시 이메일 기반 인증을 사용하세요. Google/Apple/Facebook 등 OAuth 인증은 Playwright 환경에서 정상 작동하지 않을 수 있습니다.
Claude Desktop 사용 예시

# 예시 대화
사용자: 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 # 응답 포맷설정 파일 위치
파일 | 경로 | 설명 |
로그인 세션 |
| Playwright 인증 상태 |
사용자 설정 |
| 커스텀 도메인 등 |
기술 스택
TypeScript - 타입 안전성
@modelcontextprotocol/sdk - MCP 서버 구현
Playwright - 헤드리스 브라우저
@mozilla/readability - 콘텐츠 추출
Turndown - HTML → Markdown 변환
Zod - 스키마 검증
rss-parser - RSS 피드 파싱
제한사항
Paywall 콘텐츠는 로그인 후 접근 가능
과도한 요청 시 Rate limiting 가능성
Playwright 브라우저 설치 필요 (~300MB)
라이선스
MIT
Available Tools
11 toolsadd_domainAdd Medium DomainA
Add a custom Medium partner domain to the allowed list. The domain will be saved to config file.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to add (e.g., stackademic.com, blog.example.com) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of articles (only applies to scrape mode) | |
| source | No | Data source: 'rss' (fast, limited to ~10 recent) or 'scrape' (more articles, slower) | rss |
| keyword | No | Filter articles by keyword in title, excerpt, or tags | |
| username | Yes | Medium username (without @ prefix) |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Medium article URL to read |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to remove |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Keyword to search for | |
| username | Yes | Medium username (without @ prefix) |
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v1.2.0- First observed
add_domain - First observed
list_author_articles - First observed
list_domains - First observed
login - First observed
login_status - First observed
logout - First observed
read_article - First observed
remove_domain - First observed
save_login - First observed
search_articles - First observed
search_author_articles
TDQS
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.
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.
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.
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
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
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Web search and page-reading for AI agents. One-click OAuth connect, or a Caesar API key.
Securely search, create, and organize your Mem notes and collections from AI assistants.
Clean Markdown and AI-readability scoring for any URL. Built for AI agents.
11
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to publish posts to Medium with support for drafts, tags, canonical URLs, and follower notifications. Supports various publishing statuses and SEO optimization features.172MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Medium's platform for publishing, updating, and managing articles and drafts through OAuth 2.0 authentication with automatic retry logic and rate limit handling.192MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to read, search, and write Velog blog posts. Supports post management, trending, and series/profile retrieval.10147MIT
- AlicenseNot gradedqualityFmaintenanceEnables programmatic interaction with Medium's content ecosystem for intelligent and context-aware content retrieval.1925MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yoyojyv/medium-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server