Skip to content

feat: expand read API surface with 11 new tools (55→66)#11

Merged
notque merged 3 commits intomainfrom
feat/expand-read-api-surface
May 7, 2026
Merged

feat: expand read API surface with 11 new tools (55→66)#11
notque merged 3 commits intomainfrom
feat/expand-read-api-surface

Conversation

@notque
Copy link
Copy Markdown
Owner

@notque notque commented May 7, 2026

Summary

Adds 11 high-priority read operations identified by a systematic API coverage audit. These tools complete the debugging workflow surface — enabling AI agents to trace connectivity end-to-end, inspect backend health, audit storage state, and drill into security vulnerabilities.

New Tools

Tool Service Why Critical
neutron_list_routers Neutron Trace connectivity between subnets + external gateway
neutron_list_floating_ips Neutron Map external access to internal ports/servers
octavia_list_members Octavia See backend servers in LB pools
octavia_list_healthmonitors Octavia Diagnose why backends are marked DOWN
cinder_list_snapshots Cinder Audit backup/restore state
cinder_get_snapshot Cinder Snapshot detail by UUID
cinder_list_volume_types Cinder Understand available storage tiers
nova_list_keypairs Nova Debug SSH access issues
manila_list_access_rules Manila Debug mount permission failures
ironic_list_node_ports Ironic Physical NIC details (MAC, PXE config)
keppel_get_vulnerability_report Keppel Per-manifest CVE details for security triage

Verification

  • go build ./... passes (zero errors)
  • golangci-lint passes (0 issues)
  • go test ./... passes
  • go mod tidy && go mod verify clean

Test plan

  • Build passes in CI
  • Each new tool returns properly formatted JSON via MCP
  • UUID validation rejects invalid inputs
  • Path segment validation in Keppel rejects traversal attempts

notque added 3 commits May 7, 2026 08:46
Add high-priority read operations identified by API coverage audit.
Brings the server from 55 to 65 tools across 18 services, completing
the debugging workflow surface for AI agents.

New tools:
- neutron_list_routers: Router topology for connectivity tracing
- neutron_list_floating_ips: External access mapping
- octavia_list_members: Backend servers in LB pools
- octavia_list_healthmonitors: Health check configuration
- cinder_list_snapshots: Volume snapshot inventory
- cinder_get_snapshot: Snapshot detail by UUID
- cinder_list_volume_types: Available storage tiers
- nova_list_keypairs: SSH key inventory for access debugging
- manila_list_access_rules: Share mount permissions
- ironic_list_node_ports: Physical NIC details (MAC, PXE)
- keppel_get_vulnerability_report: Per-manifest CVE details

All tools are read-only with proper annotations, UUID validation,
and response sanitization.
…dation

- Add explicit strings.Contains(value, "..") check to ValidatePathSegment
  to block embedded traversal (e.g., "x/../../accounts/victim") that the
  regex alone did not catch
- Add test case for embedded path traversal attack vector
- Validate volume_id filter in cinder_list_snapshots
- Validate pool_id filter in octavia_list_healthmonitors
- Validate port_id filter in neutron_list_floating_ips
- Remove inconsistent 200-result hard cap from neutron_list_routers and
  neutron_list_floating_ips (use limit parameter instead, matching other
  list handlers)
@notque notque merged commit c19ea97 into main May 7, 2026
2 checks passed
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

Merging this branch will not change overall coverage

Impacted Packages Coverage Δ 🤖
github.com/notque/openstack-mcp-server/internal/tools/cinder 10.10% (ø)
github.com/notque/openstack-mcp-server/internal/tools/ironic 8.96% (ø)
github.com/notque/openstack-mcp-server/internal/tools/keppel 9.88% (ø)
github.com/notque/openstack-mcp-server/internal/tools/manila 9.38% (ø)
github.com/notque/openstack-mcp-server/internal/tools/neutron 8.82% (ø)
github.com/notque/openstack-mcp-server/internal/tools/nova 10.09% (ø)
github.com/notque/openstack-mcp-server/internal/tools/octavia 7.10% (ø)
github.com/notque/openstack-mcp-server/internal/tools/shared 69.64% (ø)

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/notque/openstack-mcp-server/internal/tools/cinder/cinder.go 10.10% (ø) 99 10 89
github.com/notque/openstack-mcp-server/internal/tools/ironic/ironic.go 8.96% (ø) 67 6 61
github.com/notque/openstack-mcp-server/internal/tools/keppel/keppel.go 9.88% (ø) 81 8 73
github.com/notque/openstack-mcp-server/internal/tools/manila/manila.go 9.38% (ø) 64 6 58
github.com/notque/openstack-mcp-server/internal/tools/neutron/neutron.go 8.82% (ø) 136 12 124
github.com/notque/openstack-mcp-server/internal/tools/nova/nova.go 10.09% (ø) 109 11 98
github.com/notque/openstack-mcp-server/internal/tools/octavia/octavia.go 7.10% (ø) 169 12 157
github.com/notque/openstack-mcp-server/internal/tools/shared/helpers.go 52.94% (ø) 68 36 32

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

Changed unit test files

  • github.com/notque/openstack-mcp-server/internal/tools/shared/helpers_test.go

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant