OpenFGA MCP Server
Click on "Deploy 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., "@OpenFGA MCP Servercheck if user:alice has viewer relation for document:1 in prod"
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.
OpenFGA MCP Server
OpenFGA를 위한 Model Context Protocol (MCP) 서버입니다. Claude Code에서 OpenFGA 권한 관리 작업을 수행할 수 있습니다.
기능
스토어 관리: 스토어 목록 조회
모델 관리: Authorization Model 조회/배포
튜플 관리: 권한 관계(튜플) CRUD
권한 체크: Check, ListObjects, Expand
Related MCP server: Okta MCP Server
설치
npm install
npm run build환경 설정
방법 1: JSON 환경변수 (권장)
export OPENFGA_ENVIRONMENTS='{
"prod": {
"url": "https://openfga.example.com",
"defaultStoreId": "01ABC..."
},
"staging": {
"url": "https://openfga-staging.example.com"
}
}'방법 2: 개별 환경변수
# 각 환경별로 설정
export OPENFGA_PROD_URL="https://openfga.example.com"
export OPENFGA_PROD_STORE_ID="01ABC..."
export OPENFGA_STAGING_URL="https://openfga-staging.example.com"방법 3: 로컬 전용
# 기본값: http://localhost:8080
export OPENFGA_LOCAL_URL="http://localhost:8080"
export OPENFGA_LOCAL_STORE_ID="01XYZ..."Claude Code 설정
프로젝트별 설정 (.claude/settings.json)
{
"mcpServers": {
"openfga": {
"type": "stdio",
"command": "node",
"args": ["/path/to/openfga-mcp/dist/index.js"]
}
},
"env": {
"OPENFGA_ENVIRONMENTS": "{\"prod\":{\"url\":\"https://openfga.example.com\",\"defaultStoreId\":\"01ABC...\"}}"
}
}글로벌 설정 (~/.claude.json)
{
"mcpServers": {
"openfga": {
"type": "stdio",
"command": "node",
"args": ["/path/to/openfga-mcp/dist/index.js"],
"env": {
"OPENFGA_ENVIRONMENTS": "{\"prod\":{\"url\":\"https://openfga.example.com\"}}"
}
}
}
}사용 가능한 도구
도구 | 설명 |
| 스토어 목록 조회 |
| Authorization Model 조회 |
| Authorization Model 배포 (DSL 파일/문자열) |
| 튜플 조회 (필터 지원) |
| 단일 튜플 생성 |
| 여러 튜플 일괄 생성 |
| 튜플 삭제 |
| 권한 체크 |
| 접근 가능한 오브젝트 목록 |
| 권한 트리 확장 |
openfga_model_write
DSL 파일을 OpenFGA에 배포합니다.
요구사항: fga CLI 설치 필요 (설치 가이드)
# macOS
brew install openfga/tap/fga
# 기타
go install github.com/openfga/cli/cmd/fga@latest사용 예시
# 모델 조회
openfga_model_read(env: "prod")
# 모델 배포
openfga_model_write(env: "prod", filePath: "/path/to/model.fga")
# 권한 체크
openfga_check(env: "prod", user: "user:alice", relation: "can_view", object: "document:1")
# 튜플 생성
openfga_tuple_write(env: "prod", user: "user:alice", relation: "viewer", object: "document:1")
# 튜플 배치 생성
openfga_tuple_batch_write(env: "prod", tuples: [
{user: "user:alice", relation: "viewer", object: "document:1"},
{user: "user:bob", relation: "editor", object: "document:1"}
])자연어로도 요청 가능:
prod 환경에서 user:alice가 document:1을 can_view 할 수 있는지 확인해줘Hooks 연동 (선택)
모델 배포 후 설정 파일 자동 업데이트 등의 프로젝트별 작업이 필요하면 Claude Code Hook을 사용하세요:
{
"hooks": {
"PostToolUse": [{
"matcher": "mcp__openfga__openfga_model_write",
"hooks": [{
"type": "command",
"command": "./scripts/post-model-deploy.sh"
}]
}]
}
}Hook 스크립트는 stdin으로 JSON을 받습니다:
{
"tool_name": "mcp__openfga__openfga_model_write",
"tool_output": "모델 배포 완료!\nAuthorization Model ID: 01ABC...\nEnvironment: prod"
}개발
# 소스 수정 후 빌드
npm run build
# 개발 모드 (watch)
npm run dev라이선스
MIT
Available Tools
10 toolsopenfga_checkC
OpenFGA 권한 체크 - 사용자가 특정 권한을 가지는지 확인
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| user | Yes | 사용자 (예: user:john) | |
| relation | Yes | 권한/관계 (예: can_view, can_edit) | |
| object | Yes | 오브젝트 (예: vehicle:car1) |
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. While it indicates this is a permission check operation (which implies read-only behavior), it doesn't disclose important behavioral traits like whether this requires authentication, what the response format looks like, potential rate limits, or error conditions. For a permission checking tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.
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 extremely concise with just one sentence that directly states the tool's purpose. There's zero wasted language or unnecessary elaboration. It's appropriately sized for what it communicates and is front-loaded with the essential 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?
Given that this is a permission checking tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., boolean result, detailed permission evaluation), doesn't mention authentication requirements, and provides no context about error handling. For a tool that likely returns important authorization decisions, this leaves too many unknowns for effective 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?
The description provides no additional parameter information beyond what's already in the schema. However, with 100% schema description coverage where all 5 parameters have clear descriptions in the schema, the baseline score is 3. The description doesn't add any value regarding parameter usage, constraints, or relationships between parameters that aren't already documented in 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 tool's purpose as 'OpenFGA 권한 체크 - 사용자가 특정 권한을 가지는지 확인' (OpenFGA permission check - verify if a user has a specific permission). This is a specific verb ('check'/'verify') + resource ('permission') combination that distinguishes it from siblings like tuple operations or model management. However, it doesn't explicitly differentiate from 'openfga_list_objects' which might also involve permission-related queries.
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 no guidance on when to use this tool versus alternatives. With siblings like 'openfga_list_objects' (which might list objects a user has access to) and 'openfga_tuple_read' (which reads relationship tuples), there's no indication of when this specific permission check is preferred over those other approaches. The description only states what it does, not when it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_expandB
OpenFGA 권한 트리 확장 - 특정 오브젝트의 권한 관계 트리 조회
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| relation | Yes | 권한/관계 (예: can_view, admin) | |
| object | Yes | 오브젝트 (예: vehicle:car1) |
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 states the tool is for 'lookup' (implying read-only), but doesn't specify whether it requires authentication, has rate limits, returns paginated results, or details the output format (e.g., tree structure). For a tool with no annotation coverage, this leaves significant 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?
The description is a single, efficient sentence in Korean that front-loads the core purpose ('OpenFGA permission tree expansion') and specifies the action ('lookup of permission relationship trees for a specific object'). Every word contributes meaning with zero waste.
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 moderate complexity (permission tree expansion), no annotations, and no output schema, the description is minimally adequate. It covers the purpose but lacks details on behavioral traits, output format, and usage distinctions from siblings. It's complete enough to understand the basic function but insufficient for optimal agent operation without 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 input schema has 100% description coverage, fully documenting all 4 parameters (env, storeId, relation, object) with examples and enum values. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 without compensating value.
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 verb ('expand') and resource ('OpenFGA permission tree'), specifying it retrieves permission relationship trees for a particular object. It distinguishes from siblings like 'openfga_check' (permission verification) and 'openfga_tuple_read' (tuple retrieval), though it doesn't explicitly name alternatives.
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 by mentioning 'specific object permission relationship tree lookup,' suggesting it's for exploring permission hierarchies rather than checking permissions or managing tuples. However, it lacks explicit guidance on when to use this tool versus alternatives like 'openfga_list_objects' or 'openfga_tuple_read,' and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_list_objectsC
OpenFGA 오브젝트 목록 조회 - 사용자가 접근 가능한 오브젝트 목록
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| user | Yes | 사용자 (예: user:john) | |
| relation | Yes | 권한/관계 (예: can_view) | |
| type | Yes | 오브젝트 타입 (예: vehicle, policy) |
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 states the tool retrieves a list of accessible objects, implying a read-only operation, but doesn't disclose behavioral traits such as authentication requirements, rate limits, error handling, or pagination. This leaves significant gaps for a tool with 5 parameters and no output schema.
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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, with every part contributing to clarity.
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 complexity (5 parameters, no output schema, no annotations), the description is incomplete. It lacks details on behavioral context, usage guidelines, and output format, which are crucial for effective tool invocation. The schema covers parameters well, but overall context is insufficient.
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 100%, so the schema already documents all parameters (env, storeId, user, relation, type) with descriptions. The description adds no additional meaning beyond the schema, such as explaining interactions between parameters or providing examples. Baseline is 3 since the schema does the heavy lifting.
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 as 'OpenFGA object list retrieval - list of objects accessible to a user,' which specifies the verb (retrieve/list) and resource (objects). It distinguishes from siblings like openfga_check (permission verification) and openfga_tuple_read (tuple retrieval) by focusing on user-accessible objects, but doesn't explicitly contrast them.
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?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention when to choose it over siblings like openfga_expand (expand relationships) or openfga_tuple_read (read tuples), nor does it specify prerequisites or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_model_readC
OpenFGA Authorization Model 조회
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but only states the action without details. It doesn't clarify if this is a read-only operation (implied but not explicit), what permissions are needed, potential rate limits, error conditions, or the format of returned data. For a tool with zero annotation coverage, this is a significant gap in transparency.
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, efficient phrase that directly states the tool's function without unnecessary words. It's appropriately sized for a simple tool, though it could be more front-loaded with key details if expanded. Every word earns its place, but the brevity limits informativeness.
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 moderate complexity (2 parameters, no output schema, no annotations), the description is incomplete. It lacks details on what the tool returns (e.g., model structure, error handling), behavioral traits, and usage context. While the schema covers parameters well, the overall description doesn't provide enough information for an agent to use the tool effectively without guesswork.
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 100% description coverage, with clear docs for both parameters (env and storeId), including enum values and optionality. The description adds no parameter-specific information beyond what the schema provides, so it meets the baseline of 3 where the schema does the heavy lifting, but doesn't compensate with extra context like default behaviors or examples.
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 'OpenFGA Authorization Model 조회' clearly states the action (조회/retrieve) and resource (Authorization Model), which establishes a basic purpose. However, it doesn't specify what exactly is retrieved (e.g., model definition, metadata, version) or distinguish it from siblings like 'openfga_model_write', leaving it somewhat vague compared to optimal 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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a storeId), contrast with siblings like 'openfga_model_write' for modifications, or indicate typical use cases (e.g., inspecting current authorization rules). This lack of context makes it hard for an agent to decide appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_model_writeC
OpenFGA Authorization Model 배포 - DSL 파일 경로 또는 DSL 문자열로 모델 배포
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| filePath | No | DSL 파일 경로 (예: /path/to/model.fga) | |
| dsl | No | DSL 문자열 (filePath가 없을 때 사용) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It implies a write operation ('배포' - deploy) but doesn't disclose permissions required, whether it overwrites existing models, error handling, or response format. This is inadequate for a mutation tool with zero annotation coverage.
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, efficient sentence that front-loads the core purpose. It avoids redundancy and wastes no words, though it could be slightly more structured by separating usage notes from the main action.
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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens on deployment (e.g., model versioning, validation), error cases, or return values, leaving significant gaps in understanding the tool's behavior and outcomes.
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 100%, so parameters are well-documented in the schema. The description adds minimal value by mentioning 'DSL 파일 경로 또는 DSL 문자열' (DSL file path or DSL string), which aligns with the schema's 'filePath' and 'dsl' parameters but doesn't provide additional semantics beyond what's already covered.
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 ('배포' - deploy) and resource ('OpenFGA Authorization Model'), specifying it deploys models from either DSL file paths or DSL strings. However, it doesn't explicitly differentiate from sibling tools like 'openfga_model_read' or 'openfga_tuple_write', which handle different operations on similar resources.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a storeId), exclusions (e.g., not for reading models), or compare with siblings like 'openfga_model_read' for retrieval or 'openfga_tuple_write' for tuple operations, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_store_listC
OpenFGA 스토어 목록 조회
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) |
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 of behavioral disclosure. It only states it's a list retrieval, lacking details on permissions, rate limits, pagination, or response format. This is inadequate for a tool with no annotation support.
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, efficient phrase ('OpenFGA 스토어 목록 조회') that conveys the core purpose without waste. However, it lacks any structural elements like separation of concerns or front-loading of critical details, which slightly limits its effectiveness.
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 no annotations and no output schema, the description is incomplete. It doesn't explain what the list returns (e.g., store IDs, metadata), error conditions, or behavioral traits, leaving significant gaps for a tool that likely interacts with a complex system like OpenFGA.
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 description coverage is 100%, with the single parameter 'env' fully documented in the schema (including enum values). The description adds no additional parameter information beyond what the schema provides, so it meets the baseline score.
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 ('목록 조회' - list retrieval) and resource ('OpenFGA 스토어' - OpenFGA stores), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'openfga_list_objects' or 'openfga_model_read', which prevents a perfect score.
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 no guidance on when to use this tool versus alternatives. With multiple sibling tools available (e.g., openfga_list_objects, openfga_model_read), there's no indication of context, prerequisites, or exclusions for this specific list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_tuple_batch_writeC
OpenFGA 튜플 배치 생성 (여러 개 한번에)
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| tuples | Yes | 튜플 목록 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'batch creation' which implies a write operation, but doesn't disclose critical behavioral traits like whether this is idempotent, requires specific permissions, has rate limits, or what happens on partial failures. For a mutation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence in Korean) and front-loaded with the core purpose. There's zero wasted language, making it efficient despite potential content gaps.
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 this is a mutation tool (implied by 'creation') with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, error conditions, or behavioral constraints, leaving the agent with insufficient context for reliable 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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning about parameters beyond what's in the schema (e.g., it doesn't explain tuple structure or environment implications), meeting the baseline for high schema coverage.
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 ('batch creation') and resource ('tuples'), making the purpose understandable. However, it doesn't differentiate from sibling tools like openfga_tuple_write (single tuple creation) or openfga_tuple_delete (deletion), which would require explicit comparison for a perfect score.
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 no guidance on when to use this tool versus alternatives. With siblings like openfga_tuple_write (single tuple) and openfga_tuple_delete, there's no indication that this is for bulk operations or any prerequisites for use, leaving the agent to guess based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_tuple_deleteC
OpenFGA 튜플(권한 관계) 삭제
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| user | Yes | 사용자 (예: user:john) | |
| relation | Yes | 관계 (예: viewer) | |
| object | Yes | 오브젝트 (예: vehicle:car1) |
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 states the tool deletes tuples but doesn't describe what happens upon deletion (e.g., whether it's irreversible, if it affects permissions immediately, or if there are side effects like cascading changes). This is a significant gap for a mutation tool with zero annotation coverage.
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 extremely concise—a single phrase in Korean that directly states the tool's purpose. It's front-loaded with no wasted words, making it easy to parse quickly, though this conciseness comes at the cost of completeness in other dimensions.
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 complexity of a tuple deletion operation (a mutation with potential side effects), no annotations, no output schema, and sibling tools for similar operations, the description is incomplete. It doesn't address behavioral aspects, usage context, or what to expect after deletion, leaving significant gaps for an AI agent to understand the tool fully.
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 description coverage is 100%, so the schema already documents all 5 parameters with descriptions. The description adds no additional meaning about parameters beyond what's in the schema, such as explaining how the tuple components (user, relation, object) interact or providing examples beyond those in the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('삭제' meaning 'delete') and resource ('OpenFGA 튜플(권한 관계)' meaning 'OpenFGA tuple (permission relationship)'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like openfga_tuple_write or openfga_tuple_batch_write, which handle tuple creation/modification.
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 no guidance on when to use this tool versus alternatives. It doesn't mention when to delete tuples versus other operations like checking permissions (openfga_check) or reading tuples (openfga_tuple_read), nor does it specify prerequisites or exclusions for deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_tuple_readC
OpenFGA 튜플(권한 관계) 조회
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| user | No | 필터: 사용자 (예: user:john) | |
| relation | No | 필터: 관계 (예: viewer) | |
| object | No | 필터: 오브젝트 (예: vehicle:car1) |
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 but only states the action ('조회' - read). It doesn't mention whether this is a safe read operation, if it requires specific permissions, what the output format might be, or any rate limits. For a tool with 5 parameters and no annotation coverage, this is insufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient phrase that directly states the tool's purpose without unnecessary words. It's appropriately front-loaded and earns its place by clearly communicating the core function in minimal text.
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 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what '튜플(권한 관계)' entails in practice, how results are returned, or any behavioral constraints. The agent would lack sufficient context to use this tool effectively beyond basic parameter passing.
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 description coverage is 100%, with all parameters well-documented in the input schema (e.g., env with enum values, storeId with default behavior, user/relation/object as filters). The description adds no additional parameter information beyond what the schema already provides, so it meets the baseline score of 3 for high schema coverage.
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 verb '조회' (read/retrieve) and resource '튜플(권한 관계)' (tuples/permission relationships), making the purpose understandable. However, it doesn't distinguish this read operation from other tuple-related tools like openfga_tuple_write or openfga_tuple_delete, which would require explicit sibling differentiation for a score of 5.
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 no guidance on when to use this tool versus alternatives. Given the sibling tools include openfga_check, openfga_expand, and openfga_list_objects, which might overlap in permission-related queries, the absence of usage context or exclusions leaves the agent without direction for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openfga_tuple_writeC
OpenFGA 튜플(권한 관계) 생성
| Name | Required | Description | Default |
|---|---|---|---|
| env | Yes | 환경명 (local, int, stage, real) | |
| storeId | No | 스토어 ID (생략 시 기본값 사용) | |
| user | Yes | 사용자 (예: user:john, company:42dot#member) | |
| relation | Yes | 관계 (예: viewer, admin, operator) | |
| object | Yes | 오브젝트 (예: vehicle:car1, policy:policy1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action ('생성/create'). It doesn't disclose behavioral traits such as whether this is a mutation (implied by 'create'), what permissions are required, whether it's idempotent, error handling, or what happens on success. For a write operation with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient phrase in Korean that directly states the tool's purpose without any wasted words. It's appropriately sized and front-loaded, making it easy to understand at a glance.
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 this is a write operation with no annotations and no output schema, the description is incomplete. It doesn't cover what the tool returns, error conditions, or important behavioral context needed for safe invocation. The schema provides parameter details, but the description lacks crucial operational information.
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 100%, so the schema already documents all 5 parameters with descriptions and examples. The description adds no additional meaning beyond what's in the schema, such as explaining the tuple model (user-relation-object) or how parameters interact. Baseline 3 is appropriate when schema does the heavy lifting.
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 'OpenFGA 튜플(권한 관계) 생성' clearly states the action (생성/create) and resource (튜플/권한 관계/tuple/permission relationship) in Korean. It distinguishes from siblings like openfga_tuple_read or openfga_tuple_delete by specifying creation, though it doesn't explicitly differentiate from openfga_tuple_batch_write.
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?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention when to choose openfga_tuple_write over openfga_tuple_batch_write for single vs. batch operations, or when to use it in the context of other OpenFGA tools like openfga_check or openfga_expand.
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.
10 tool updates
- First observed
openfga_check - First observed
openfga_expand - First observed
openfga_list_objects - First observed
openfga_model_read - First observed
openfga_model_write - First observed
openfga_store_list - First observed
openfga_tuple_batch_write - First observed
openfga_tuple_delete - First observed
openfga_tuple_read - First observed
openfga_tuple_write
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose targeting specific OpenFGA operations: check, expand, list_objects, model_read/write, store_list, and tuple operations (read/write/delete/batch_write). No overlap exists between tools, making selection unambiguous for an agent.
All tools follow a consistent 'openfga_' prefix with snake_case naming, using descriptive verb_noun patterns (e.g., openfga_check, openfga_tuple_write). This uniformity makes the tool set predictable and easy to navigate.
With 10 tools, this server is well-scoped for OpenFGA operations, covering core functionalities like authorization checks, model management, tuple operations, and store handling. Each tool earns its place without being overwhelming or insufficient.
The tool set provides complete coverage for OpenFGA's domain, including CRUD operations for tuples and models, permission checks, expansion for relationship trees, and store management. No obvious gaps exist, enabling agents to handle full authorization workflows.
Maintenance
Related MCP Connectors
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Your Supabase account in natural language: run SQL, apply migrations, manage tables, storage, edge f
- WorkOSOAuthcom.workos
Manage your WorkOS workspace in plain language: orgs, users, SSO, Directory Sync, and AuthKit.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables intelligent interaction with Azure resources through natural language by translating requests into safe, auditable Azure CLI commands with plan/review workflows and direct access to 8 Azure services including Storage, Cosmos DB, Key Vault, and more.31MIT
- AlicenseNot gradedqualityDmaintenanceEnables management of Okta identity platform through natural language, allowing users to perform operations on applications, groups, and users with secure API token authentication.6 npm2MIT

aptible-mcpofficial
AlicenseBqualityCmaintenanceEnables interaction with the Aptible API for managing Aptible resources such as accounts, apps, and databases through natural language.38MIT
OneLogin MCP Serverofficial
AlicenseNot gradedqualityAmaintenanceEnables managing users, apps, roles, authentication, and security settings through natural language, providing comprehensive access to the OneLogin API.244 npm5MIT