Skip to content

MCP tool calls execute as anonymous despite valid Basic authentication #208

Description

@vineett

Jenkins and plugins versions report

Jenkins: 2.568.1
OS: Linux - 5.4.17-2136.356.4.2.el7uek.x86_64
Java: 21.0.2 - Oracle Corporation (Java HotSpot(TM) 64-Bit Server VM)

Parameterized-Remote-Trigger:3.2.2
ai-agent:98.vf7c090a_9c37c
ansicolor:536.v13fa_b_860c267
ant:520.vd082ecfb_16a_9
antisamy-markup-formatter:173.v680e3a_b_69ff3
apache-httpcomponents-client-4-api:4.5.14-269.vfa_2321039a_83
apache-httpcomponents-client-5-api:5.6.2-199.vc3c04d033fcc
artifactory:4.0.8
asm-api:9.10.1-216.va_9256d3b_844b_
authentication-tokens:1.144.v5ff4a_5ec5c33
badge:3.591.v9074c6c6f0b_9
bootstrap5-api:5.3.8-1048.va_c299057e35c
bouncycastle-api:2.30.1.84-291.v9f17b_21896e2
branch-api:2.1280.v0d4e5b_b_460ef
build-name-setter:2.5.1
build-timeout:1.40
build-token-root:151.va_e52fe3215fc
caffeine-api:3.2.4-208.v7e2da_a_7db_82b_
checks-api:415.vf022234a_931d
cloudbees-folder:6.1100.ve9eed61d16c4
command-launcher:134.v025a_5fcf9dea_
commons-collections4-api:4.5.0-8.va_d5448ef9011
commons-compress-api:1.28.0-82.v4df6c060eb_66
commons-lang3-api:3.20.0-109.ve43756e2d2b_4
commons-text-api:1.15.0-218.va_61573470393
conditional-buildstep:1.5.0
config-file-provider:1013.v73c323e52b_1f
configuration-as-code:2100.vb_fd699d2a_09c
configurationslicing:709.v4c76e613470f
coverage:3.3278.va_04d3e352354
credentials:1506.v948b_b_b_7dec44
credentials-binding:728.v902a_273b_8947
dark-theme:652.vea_da_dfea_e769
data-tables-api:2.3.8-1570.v1cb_1cd2a_0fb_c
display-url-api:2.217.va_6b_de84cc74b_
docker-commons:472.vee120e23d3a_c
docker-workflow:634.vedc7242b_eda_7
durable-task:686.v80ff80875b_82
echarts-api:6.0.0-1287.vfd24c22a_3d00
eddsa-api:0.3.0.1-29.v67e9a_1c969b_b_
email-ext:2038.v7b_8817a_499d9
emailext-template:249.v81d6ea_f33f2e
emoji-symbols-api:17.0-57.v8d44b_9a_b_d5ea_
envinject:2.941.v351a_20c0a_3ca_
envinject-api:1.241.vdd714803b_403
favorite:2.267.vb_90d08408081
folder-properties:62.v1636b_4a_84608
font-awesome-api:7.2.0-990.vf220b_2a_496f9
forensics-api:4.1891.v5e60f3377506
generic-event:49.v8cdd8314e99d
generic-webhook-trigger:2.4.2
git:5.10.1
git-client:6.6.1
git-server:137.ve0060b_432302
github:1.47.0
github-api:1.330-492.v3941a_032db_2a_
github-branch-source:1967.1970.vd86979736546
global-slack-notifier:1.5
gradle:2.19.1244.v1f9866817fec
groovy:537.v741a_5a_f1b_581
groovy-postbuild:303.v5fe3da_6233f0
gson-api:2.14.0-201.v8eefe5515533
htmlpublisher:427.1
instance-identity:203.v15e81a_1b_7a_38
ionicons-api:94.vcc3065403257
jackson-annotations2-api:2.22-19.v10a_a_582ea_26e
jackson2-api:2.22.0-439.vb_b_43658d6176
jackson3-api:3.2.1-92.vd25c2e23c180
jakarta-activation-api:2.1.4-1
jakarta-mail-api:2.1.5-1
jakarta-xml-bind-api:4.0.9-19.v2b_a_5b_44d9a_1c
javadoc:354.vee1a_660b_4990
javax-activation-api:1.2.0-8
javax-mail-api:1.6.2-11
jaxb:2.3.9-143.v5979df3304e6
jdk-tool:83.v417146707a_3d
jersey2-api:2.48-180.ve47b_264f849b_
jjwt-api:0.13.0-141.vd58b_a_9592b_6c
job-dsl:3654.vdf58f53e2d15
jobConfigHistory:1367.vc8fa_b_15101dc
joda-time-api:2.14.2-193.v422b_efce56e0
jquery3-api:3.7.1-687.v68d468e40b_30
jsch:0.2.16-95.v3eecb_55fa_b_78
json-api:20260522-217.v0b_18b_8cd4672
json-path-api:3.0.0-218.vcd4dd1355de2
jsoup:1.22.2-95.vc5d00f1eb_42d
junit:1413.v736fa_5b_61d80
kubernetes:4437.v3a_18554d3f32
kubernetes-cli:1.375.v8001982544ba
kubernetes-client-api:7.3.1-256.v788a_0b_787114
kubernetes-credentials:207.v492f58828b_ed
ldap:807.809.vd3a_4e5e4ec98
log-parser:3.0.3
mailer:534.v1b_36f5864073
matrix-auth:3.2.10
matrix-project:870.v9db_fcfc2f45b_
maven-plugin:3.27
mcp-server:0.178.vffe5a_e770f3b_
metrics:4.2.37-494.v06f9a_939d33a_
mina-sshd-api-common:2.17.1-187.v0341274c2905
mina-sshd-api-core:2.17.1-187.v0341274c2905
naginator:1.556.v14d723a_109a_c
nodejs:1.6.6
nodelabelparameter:851.vd94e5048d321
notification:1.18
oauth-credentials:0.660.vce7c108f1f3a_
okhttp-api:5.3.2-200.vedb_720a_cf1f8
oracle-ci-scanner-plugin:1.0.0.42
oracle-cloud-infrastructure-compute:1.0.20
oracle-oauth-plugin:1.0.0.54
oss-symbols-api:465.v25d9fdc88c26
p4:1.18.0
parameterized-scheduler:379.v95c73f233a_df
parameterized-trigger:893.va_383a_9b_a_4c11
pipeline-build-step:584.vdb_a_2cc3a_d07a_
pipeline-github-lib:65.v203688e7727e
pipeline-graph-analysis:254.v0f63a_a_447dca_
pipeline-groovy-lib:798.v5cc688825312
pipeline-input-notification:17.v3401b_efd3f89
pipeline-input-step:560.v56198a_642157
pipeline-maven:1735.v63b_5b_1b_d25d9
pipeline-maven-api:1735.v63b_5b_1b_d25d9
pipeline-milestone-step:152.v6e22b_8cfc66c
pipeline-model-api:2.2291.v2934911987b_6
pipeline-model-definition:2.2291.v2934911987b_6
pipeline-model-extensions:2.2291.v2934911987b_6
pipeline-rest-api:2.41
pipeline-stage-step:345.va_96187909426
pipeline-stage-tags-metadata:2.2291.v2934911987b_6
pipeline-stage-view:2.41
pipeline-utility-steps:3.810.va_7672d206740
plain-credentials:199.v9f8e1f741799
plugin-usage-plugin:418.v308c3c863d25
plugin-util-api:7.1341.v039f146993d9
postbuild-task:78.v24529f1f5cdb_
postbuildscript:3.4.1-695.vf6b_0b_8053979
prism-api:1.30.0-741.v034eb_0b_0a_a_fa_
property-attacher-plugin-jenkins:1.0.0
rebuild:338.va_0a_b_50e29397
resource-disposer:0.25
reverse-proxy-auth-plugin:245.v93f25b_b_b_3102
role-strategy:878.v6f1d3b_3a_0769
run-condition:276.v97298f3a_cd51
scm-api:728.vc30dcf7a_0df5
script-security:1402.1405.vc96e74964250
sidebar-link:2.5.0
simple-build-for-pipeline:0.2
slack:795.v4b_9705b_e6d47
snakeyaml-api:2.5-149.v72471e9c6371
snakeyaml-engine-api:3.0.1-5.vd98ea_ff3b_92e
sonar:2.18.3
ssh-credentials:372.va_250881b_08cd
ssh-slaves:3.1097.v868116049892
sshd:3.384.vc89b_5e138cf9
structs:362.va_b_695ef4fdf9
theme-manager:346.v06cca_64c6a_37
timestamper:1.30
token-macro:477.vd4f0dc3cb_cf1
trilead-api:2.284.v1974ea_324382
uno-choice:2.8.9
validating-string-parameter:345.v0f4330488a_f6
variant:70.va_d9f17f859e0
woodstox-core-api:7.2.1-6.v3718a_a_11f5c4
workflow-aggregator:608.v67378e9d3db_1
workflow-api:1413.v2ff1a_5e720fa_
workflow-basic-steps:1098.v808b_fd7f8cf4
workflow-cps:4350.vcc65d4958821
workflow-durable-task-step:1479.v56e587f413a_7
workflow-job:1581.ve4b_d0db_fcb_b_b_
workflow-multibranch:821.vc3b_4ea_780798
workflow-scm-step:466.va_d69e602552b_
workflow-step-api:724.v538c2362b_dfb_
workflow-support:1015.v785e5a_b_b_8b_22
ws-cleanup:0.49

What Operating System are you using (both controller, and any agents involved in the problem)?

Controller OS: Oracle Enterprise Linux
Client: Codex desktop on Windows.
No Jenkins agents are involved in this MCP request.

Reproduction steps

  1. Configure an MCP client to use the Streamable HTTP endpoint /mcp-server/mcp with Authorization: Basic <base64(username:api-token)>.
  2. Verify the same header directly against <jenkins-url>/whoAmI/api/json; it returns HTTP 200 with anonymous: false.
  3. Connect the MCP client and call the built-in whoAmI tool.
  4. Observe the MCP error: AccessDeniedException3: anonymous is missing the Overall/Read permission.
  5. With FINE logging enabled, observe that the tool call reaches io.jenkins.plugins.mcp.server.tool.McpToolWrapper.call, then fails at ACL.checkPermission from a Reactor SchedulerTask worker thread.

Expected Results

The MCP whoAmI tool should execute with the authenticated Jenkins principal from the Basic-authenticated request and return that principal.

Actual Results

The tool call is executed as anonymous and fails because anonymous lacks Overall/Read. The direct Jenkins REST whoAmI API call using the same Basic header authenticates successfully.

Anything else?

No response

Are you interested in contributing a fix?

I can help validate a proposed fix, but I am not currently planning to contribute code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions