Model Context Protocol (MCP)

The Model Context Protocol (MCP) servers the Urda Anvil runs by default, and exactly what permission each tool carries.

Every tool below carries two tags: what it does read search write and what Claude is allowed to do with it allow ask deny . Allow runs without asking, ask prompts for confirmation, and deny is blocked outright. The allow and deny rules are shown under Configuration · Claude; ask carries no rule of its own, because Claude Code prompts for anything a rule has not already allowed or denied.

Configuration · Claude

Server registration lives in ~/.claude.json; the permission allow-list lives in ~/.claude/settings.json.

Servers · ~/.claude.json

{
  "atlassian": {
    "type": "http",
    "url": "https://mcp.atlassian.com/v1/mcp/authv2"
  },
  "aws-knowledge-mcp-server": {
    "type": "http",
    "url": "https://knowledge-mcp.global.api.aws"
  },
  "context7": {
    "type": "http",
    "url": "https://mcp.context7.com/mcp"
  },
  "grep": {
    "type": "http",
    "url": "https://mcp.grep.app"
  },
  "schema-store": {
    "type": "http",
    "url": "https://mcp.schemastore.org"
  }
}

Permissions · allow / ask / deny

{
  "allow": [
    "mcp__atlassian__atlassianUserInfo",
    "mcp__atlassian__fetch",
    "mcp__atlassian__getAccessibleAtlassianResources",
    "mcp__atlassian__getConfluencePage",
    "mcp__atlassian__getConfluencePageDescendants",
    "mcp__atlassian__getConfluencePageFooterComments",
    "mcp__atlassian__getConfluencePageInlineComments",
    "mcp__atlassian__getConfluenceSpaces",
    "mcp__atlassian__getIssueLinkTypes",
    "mcp__atlassian__getJiraIssue",
    "mcp__atlassian__getJiraIssueRemoteIssueLinks",
    "mcp__atlassian__getJiraIssueTypeMetaWithFields",
    "mcp__atlassian__getJiraProjectIssueTypesMetadata",
    "mcp__atlassian__getPagesInConfluenceSpace",
    "mcp__atlassian__getTransitionsForJiraIssue",
    "mcp__atlassian__getVisibleJiraProjects",
    "mcp__atlassian__lookupJiraAccountId",
    "mcp__atlassian__search",
    "mcp__atlassian__searchConfluenceUsingCql",
    "mcp__atlassian__searchJiraIssuesUsingJql",
    "mcp__aws-knowledge-mcp-server__aws___get_regional_availability",
    "mcp__aws-knowledge-mcp-server__aws___list_regions",
    "mcp__aws-knowledge-mcp-server__aws___read_documentation",
    "mcp__aws-knowledge-mcp-server__aws___retrieve_skill",
    "mcp__aws-knowledge-mcp-server__aws___search_documentation",
    "mcp__context7__query-docs",
    "mcp__context7__resolve-library-id",
    "mcp__grep__searchGitHub",
    "mcp__schema-store__getSchema",
    "mcp__schema-store__listSchemas",
    "mcp__schema-store__searchSchemas"
  ],
  "ask": [],
  "deny": [
    "mcp__atlassian__addTeamworkGraphContext",
    "mcp__atlassian__addWorklogToJiraIssue",
    "mcp__atlassian__bitbucketDeployment",
    "mcp__atlassian__bitbucketEnvironment",
    "mcp__atlassian__bitbucketPipeline",
    "mcp__atlassian__bitbucketPullRequest",
    "mcp__atlassian__bitbucketRepoContent",
    "mcp__atlassian__bitbucketRepository",
    "mcp__atlassian__bitbucketUser",
    "mcp__atlassian__bitbucketWorkspace",
    "mcp__atlassian__createCompassComponent",
    "mcp__atlassian__createCompassComponentRelationship",
    "mcp__atlassian__createCompassCustomFieldDefinition",
    "mcp__atlassian__createConfluenceFooterComment",
    "mcp__atlassian__createConfluenceInlineComment",
    "mcp__atlassian__getCompassComponent",
    "mcp__atlassian__getCompassComponents",
    "mcp__atlassian__getCompassComponentActivityEvents",
    "mcp__atlassian__getCompassComponentLabels",
    "mcp__atlassian__getCompassComponentTypes",
    "mcp__atlassian__getCompassComponentsOwnedByMyTeams",
    "mcp__atlassian__getCompassCustomFieldDefinitions",
    "mcp__atlassian__getConfluenceCommentChildren",
    "mcp__atlassian__getJsmOpsAlerts",
    "mcp__atlassian__getJsmOpsScheduleInfo",
    "mcp__atlassian__getJsmOpsTeamInfo",
    "mcp__atlassian__getTeamworkGraphContext",
    "mcp__atlassian__getTeamworkGraphObject",
    "mcp__atlassian__updateJsmOpsAlert"
  ]
}

Configuration · Codex

Codex keeps registration and permissions in one file, ~/.codex/config.toml, instead of splitting them across two. Same five servers, same URLs, same decisions. Claude's deny list is Codex's disabled_tools, entry for entry. Claude's allow list is Codex's enabled_tools on four of the five servers. The atlassian server enables the write tools as well, and its approval mode gates them. The permission tag on each tool above holds under either agent.

default_tools_approval_mode reads backwards. Per the Codex MCP reference, approve means allow every tool without prompting; the mode that stops and asks is prompt. So approve here is Codex spelling what Claude spells allow. The atlassian server uses a third mode, writes. It prompts for every tool that the server does not mark read-only. That is Codex spelling what Claude spells ask.

Servers · ~/.codex/config.toml

[mcp_servers]

[mcp_servers.atlassian]
enabled = true
required = false
url = "https://mcp.atlassian.com/v1/mcp/authv2"
enabled_tools = [
  "addCommentToJiraIssue",
  "atlassianUserInfo",
  "createConfluencePage",
  "createIssueLink",
  "createJiraIssue",
  "editJiraIssue",
  "fetch",
  "getAccessibleAtlassianResources",
  "getConfluencePage",
  "getConfluencePageDescendants",
  "getConfluencePageFooterComments",
  "getConfluencePageInlineComments",
  "getConfluenceSpaces",
  "getIssueLinkTypes",
  "getJiraIssue",
  "getJiraIssueRemoteIssueLinks",
  "getJiraIssueTypeMetaWithFields",
  "getJiraProjectIssueTypesMetadata",
  "getPagesInConfluenceSpace",
  "getTransitionsForJiraIssue",
  "getVisibleJiraProjects",
  "lookupJiraAccountId",
  "search",
  "searchConfluenceUsingCql",
  "searchJiraIssuesUsingJql",
  "transitionJiraIssue",
  "updateConfluencePage",
]
disabled_tools = [
  "addTeamworkGraphContext",
  "addWorklogToJiraIssue",
  "bitbucketDeployment",
  "bitbucketEnvironment",
  "bitbucketPipeline",
  "bitbucketPullRequest",
  "bitbucketRepoContent",
  "bitbucketRepository",
  "bitbucketUser",
  "bitbucketWorkspace",
  "createCompassComponent",
  "createCompassComponentRelationship",
  "createCompassCustomFieldDefinition",
  "createConfluenceFooterComment",
  "createConfluenceInlineComment",
  "getCompassComponent",
  "getCompassComponentActivityEvents",
  "getCompassComponentLabels",
  "getCompassComponents",
  "getCompassComponentsOwnedByMyTeams",
  "getCompassComponentTypes",
  "getCompassCustomFieldDefinitions",
  "getConfluenceCommentChildren",
  "getJsmOpsAlerts",
  "getJsmOpsScheduleInfo",
  "getJsmOpsTeamInfo",
  "getTeamworkGraphContext",
  "getTeamworkGraphObject",
  "updateJsmOpsAlert",
]
default_tools_approval_mode = "writes"

[mcp_servers.aws-knowledge-mcp-server]
enabled = true
required = false
url = "https://knowledge-mcp.global.api.aws"
enabled_tools = [
  "aws___get_regional_availability",
  "aws___list_regions",
  "aws___read_documentation",
  "aws___retrieve_skill",
  "aws___search_documentation",
]
default_tools_approval_mode = "approve"

[mcp_servers.context7]
enabled = true
required = false
url = "https://mcp.context7.com/mcp"
enabled_tools = [
  "query-docs",
  "resolve-library-id",
]
default_tools_approval_mode = "approve"

[mcp_servers.grep]
enabled = true
required = false
url = "https://mcp.grep.app"
enabled_tools = [
  "searchGitHub",
]
default_tools_approval_mode = "approve"

[mcp_servers.schema-store]
enabled = true
required = false
url = "https://mcp.schemastore.org"
enabled_tools = [
  "getSchema",
  "listSchemas",
  "searchSchemas"
]
default_tools_approval_mode = "approve"