ASF Policy MCP
ASF 정책 MCP
Apache Software Foundation 정책에 대한 질문에 답변하기 위한 MCP 서버입니다.
https://www.apache.org/board/policies에 나열된 전체 정책 세트(릴리스, 라이선스, 브랜딩, 보안, 인프라, 인큐베이터 등)를 다룹니다.
정책 페이지는 로컬에 30일 동안 캐시됩니다. 단일 호출에 대해 캐시를 우회하려면 읽기 도구에서 force_refresh=true를 사용하세요.
설치
python3 -m venv .venv
. .venv/bin/activate
pip install -e .Related MCP server: Open Policy Agent (OPA) REST API MCP Server
실행
asf-policy-mcp로컬 개발 환경:
python -m asf_policy_mcp.server테스트
pip install -e ".[dev]"
make checkClaude Desktop 또는 Codex 구성
{
"mcpServers": {
"asf-policy": {
"command": "<path to PolicyMCP>/.venv/bin/python",
"args": ["-m", "asf_policy_mcp.server"]
}
}
}도구
list_policies— 캐시 상태와 함께 섹션별로 정리된 모든 사용 가능한 정책 문서를 나열합니다.get_policy— 키(예:release_policy,branding,incubator)를 사용하여 정책 문서의 전체 텍스트를 검색합니다.search_policies— 모든 정책 문서에서 키워드를 검색하고 문맥이 포함된 순위가 매겨진 발췌문을 반환합니다.refresh_cache— ASF 웹사이트에서 하나 또는 모든 정책 문서를 강제로 다시 가져옵니다.
질문 예시
릴리스
릴리스 아티팩트가 유효하려면 어떤 파일이 포함되어야 합니까?
PMC의 +1 투표 하나만으로 릴리스를 배포할 수 있습니까?
릴리스 아티팩트는 어디에 게시해야 합니까? GitHub Releases를 기본 다운로드로 사용할 수 있습니까?
인큐베이터
포들링(podling)이 졸업하려면 무엇을 해야 합니까?
포들링이 졸업 전에 릴리스를 배포할 수 있습니까? 추가 요구 사항은 무엇입니까?
누가 포들링 릴리스에 투표할 수 있으며, 누구의 투표가 구속력이 있습니까?
라이선스
MIT 라이선스는 릴리스 번들링을 위해 Apache 2.0과 호환됩니까?
LGPL 2.1 라이선스가 적용된 라이브러리를 포함할 수 있습니까?
Category X 라이선스란 무엇이며 왜 중요합니까?
모든 기여자로부터 CLA를 받아야 합니까, 아니면 커미터로부터만 받아야 합니까?
소스 파일에 어떤 라이선스 헤더가 필요합니까?
보안
누군가 취약점을 비공개로 보고하면, 공개하기까지 얼마나 걸립니까?
보안 문제를 공개 dev 메일링 리스트에서 논의해야 합니까?
브랜딩
제3자가 상업용 제품 이름에 "Apache Foo"를 사용할 수 있습니까?
상표 준수를 위해 프로젝트 웹사이트에 무엇이 표시되어야 합니까?
정책 문서
키 | 제목 | 섹션 |
| PMC 가이드 | 커뮤니티 및 프로젝트 감독 |
| 프로젝트 독립성 | 독립성 |
| 이사회 보고 요구 사항 | 보고 |
| 릴리스 정책 | 릴리스 |
| Apache 투표 절차 | 릴리스 |
| 릴리스 배포 정책 | 릴리스 |
| 보안 팀 지침 | 보안 |
| 커미터를 위한 취약점 처리 | 보안 |
| 기여자 라이선스 계약 | 라이선스 |
| Apache 소스 헤더 | 라이선스 |
| 승인/해결된 제3자 라이선스 | 라이선스 |
| 프로젝트 브랜딩 요구 사항 | 브랜딩 |
| 상표 유지 관리 책임 | 브랜딩 |
| 웹사이트 링크 정책 | 브랜딩 |
| 저장소 정책 | 인프라 |
| 웹사이트 정책 | 인프라 |
| 언론 및 마케팅 정책 | 언론 |
| 후원 요구 사항 | 모금 |
| 개인정보 처리방침 | 개인정보 |
| 인큐베이터 포들링 정책 | 인큐베이터 |
Available Tools
4 toolsget_policyA
Retrieve the full text of a specific ASF policy document.
Use list_policies to discover valid policy keys such as 'release_policy', 'branding', 'resolved_licenses', 'incubator', etc.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| force_refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It implies a read-only operation but does not explain the force_refresh parameter or any caching behavior. Side effects are not mentioned, but the tool is likely safe.
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 concise sentences with no wasted words. The key point is front-loaded, and the guidance is immediately after.
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 retrieval tool, the description covers the main purpose and provides a prerequisite. However, it lacks details on the force_refresh parameter and potential errors. The output schema may compensate, but the description alone is slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description does not explain the 'key' parameter's format or valid values beyond the example keys, and 'force_refresh' is not described. This is insufficient for parameter understanding.
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 retrieves the full text of a specific ASF policy document. It distinguishes from siblings by referencing list_policies for discovering valid keys.
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 explicitly directs users to use list_policies to find valid policy keys, providing a clear prerequisite and alternative. However, it does not mention when to use search_policies or refresh_cache instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_policiesA
List all available ASF policy documents organised by section.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the tool lists all policies organized by section, which is transparent enough for a simple read operation. However, it does not disclose potential pagination, rate limits, or data volume, which could be relevant for an agent.
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 filler. Every word adds value: 'list all available' sets scope, 'ASF policy documents' identifies the resource, 'organised by section' provides structure. It is optimally concise.
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 zero parameters and the presence of an output schema, the description is complete. It tells the agent what the tool does (list all policies by section) and nothing more is needed for correct invocation. Sibling tools provide additional context for differentiation.
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?
There are zero parameters, and the input schema coverage is 100% (empty). According to guidelines, the baseline score is 4 when no parameters exist. The description adds no param info because none are needed.
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 'List' and clearly identifies the resource as 'all available ASF policy documents'. It also adds organization detail 'by section', which differentiates it from siblings like 'get_policy' (single document) and 'search_policies' (filtered 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 description implies when to use the tool (when you need all policies organized by section) but provides no explicit guidance on when not to use it or alternatives. Given sibling names, context is inferred but not stated, so the score is neutral.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_cacheA
Re-fetch policy documents from the ASF website in parallel, bypassing the 30-day cache.
Omit keys to refresh all policies.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions parallel fetching and cache bypass, which are key traits. But without annotations, it should disclose potential costs (external fetches) and safety (non-destructive but mutates cache). Currently lacks these.
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 sentences with no redundancy. The first sentence states the main action, the second explains the parameter behavior. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and a single optional parameter, the description covers the essential information for invocation. Minor gap: doesn't mention the effect on other tools' data (e.g., get_policy will now show fresh data).
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 only parameter 'keys' has no schema description, but the description clarifies its meaning: omit to refresh all, provide to refresh specific. This adds value beyond the schema.
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 (re-fetch policy documents via parallel) and resource (ASF website), and it distinguishes from sibling tools that read the cached policies.
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 explains when to use the tool (to bypass cache and force refresh) and how to scope the refresh (omit keys for all, provide keys for specific). However, no explicit 'when not to use' or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_policiesA
Search across cached ASF policy documents for a query term or phrase.
Returns ranked excerpts with surrounding context. Only searches policies already in the local cache — run refresh_cache first to ensure all policies are available.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes return format (ranked excerpts with context) and cache dependency. Does not disclose read-only nature or other behavioral details like rate limits or error conditions.
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?
Three sentences, each adding value: first states purpose, second specifies return format, third gives prerequisite. No filler. Information is front-loaded and efficient.
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?
Output schema exists, so return details are covered. Description gives a high-level sense of output (ranked excerpts). However, missing parameter details and lack of behavioral nuance about caching status make it slightly less complete than ideal for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning no descriptions in schema. Description only mentions 'query term or phrase' for the query parameter, but does not explain the max_results parameter or provide any additional semantics beyond the parameter names.
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 verb 'search' and resource 'cached ASF policy documents', distinguishing it from siblings get_policy (retrieve specific), list_policies (list all), and refresh_cache (update). It specifies ranking and excerpts.
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?
Explicitly states prerequisite 'run refresh_cache first', advising when the tool is usable. Does not explicitly state when not to use or directly contrast with siblings, but the context is clear enough.
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.
4 tool updates
v0.1.0- First observed
get_policy - First observed
list_policies - First observed
refresh_cache - First observed
search_policies
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: listing, retrieving, searching, and caching. No overlap or confusion.
All tool names follow a consistent verb_noun pattern in snake_case: get_policy, list_policies, refresh_cache, search_policies.
Four tools are perfectly scoped for managing policy documents: list, get, search, and cache refresh.
The set covers all necessary operations for a read-only policy server: discovery, retrieval, search, and cache management.
Maintenance
Related MCP Connectors
MCP server for opencode documentation, generated by doc2mcp.
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
MCP server for agentverse documentation, generated by doc2mcp.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceThis MCP Server provides a natural language interface to interact with Google's Policy Analyzer API, allowing users to analyze policies and evaluate compliance through conversations.-
- FlicenseNot gradedqualityDmaintenanceAn MCP Server that enables natural language interaction with the Open Policy Agent REST API, allowing users to manage policies, decisions, and data through conversational interfaces.1-
- AlicenseAqualityBmaintenanceAn MCP server that gives AI assistants access to the AsyncAPI specification - search, explore and retrieve any version of the spec directly from your coding tool.5Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides full-text search over documentation using Whoosh, enabling AI assistants to find up-to-date, authoritative answers.MIT