Add OCI Language MCP Server - #406
Conversation
|
Hi @krisrice @dustin-sale Can you please help review/approve this PR for adding OCI Language MCP ? |
dustin-sale
left a comment
There was a problem hiding this comment.
Review by @dustin-sale via Codex.
Requested changes
models.py:120— [P1] Restrict caller-controlled OCI regions.provider.py:159— [P1] Disable OCI SDK request logging.Containerfile:28— [P1] Do not expose unauthenticated local mode on all interfaces.http_security.py:64— [P1] Prevent invalid OAuth tokens from consuming the authenticated quota.Containerfile:19— [P1] Align the container build context with Make and effective ignore rules.
Additional review notes
- Correct timeout classification and response-key reconciliation.
- Preserve REMOVE output formatting and handle empty PII masking maps consistently.
- Make the container healthcheck deployment-aware.
- Permit OCI's documented
chars_to_consider=0behavior.
Validation
make lint passed. make test project=oci-language-mcp-server passed all 87 tests with 91.00% branch coverage. No container image was executed.
See the inline comments in this review for evidence, impact, and suggested remediation.
|
@dustin-sale Addressed the latest comments, please check. |
dustin-sale
left a comment
There was a problem hiding this comment.
Review by @dustin-sale via Codex.
Requested changes
Containerfile:22— [P1] Disable development workspace sources when syncing the production image sooracle-mcp-commoninstalls from PyPI.README.md:101— [P2] Follow the repository’s Podman-based container build and run workflow.
Re-review result
Ten previous findings are addressed: caller-controlled region validation, OCI request logging, unauthenticated container defaults, OAuth quota placement, timeout classification, response-key reconciliation, REMOVE formatting, empty masking semantics, healthcheck behavior, and chars_to_consider=0.
The remaining issues are limited to container packaging. The server-only context is appropriate, but the current locked sync still requires the absent development workspace, and the server README diverges from the root project’s supported Podman workflow.
Validation
make lint passed. make test project=oci-language-mcp-server passed all 95 tests with 91.11% branch coverage. Package lock and build checks passed with the repository workspace present. A focused OAuth probe confirmed invalid tokens do not consume the authenticated quota.
In an isolated server-only context, the current uv sync --locked path failed on the unavailable ../common workspace. Disabling development sources allowed the standard oracle-mcp-common>=0.1.2,<0.2.0 dependency to resolve from PyPI while retaining the version already selected by the development lock.
|
@dustin-sale Addressed the latest review comments, please check. |
dustin-sale
left a comment
There was a problem hiding this comment.
Review by @dustin-sale via Codex.
Requested changes
src/oci-language-mcp-server/README.md:100— [P1] Make the documented Podman build path self-contained.
Additional review notes
src/oci-language-mcp-server/README.md:28— [P2] List Podman, not Docker, as the container prerequisite.
Validation
make lint and make test project=oci-language-mcp-server passed; all 95 tests passed with 91.11% branch coverage. The isolated production sync installed oracle-mcp-common==0.1.2 from PyPI, but the documented make containerize command failed because tomlq is undeclared.
See the inline comments in this review for evidence, impact, and suggested remediation.
| From the repository root, build the image with the supported Podman workflow: | ||
|
|
||
| ```bash | ||
| SUBDIRS=src/oci-language-mcp-server make containerize |
There was a problem hiding this comment.
Comment from @dustin-sale via Codex.
[P1] Make the documented container target self-contained
-
Evidence: In a clean detached checkout bootstrapped from
requirements-dev.txt, the exact documented command fails twice withFailed to spawn: tomlq. The sharedcontainerizerecipe invokesuv run tomlq, but neither repository requirements file declares that executable. The recipe then continues with empty image name and version values. The passing language-server CI job runsuv build, not this container target. -
Impact: Users following this README cannot produce the advertised image from the repository-supported workflow.
-
Requested change: Make the shared
containerizetarget resolve project name and version without an undeclared executable—for example, use Pythontomllibas the repository’s other Make targets already do—and make metadata-resolution failures terminate the recipe. Add validation that exercises the exact documented target.
This issue already existed before this PR, but might as well fix it. Adding tomlq to requirements-dev.txt should resolve this issue.
There was a problem hiding this comment.
My PR review skill is still not happy with make containerize. See my comment in Makefile.
|
@dustin-sale Addressed the latest review comments, please check. |
|
Hi @dustin-sale , Gentle Reminder to review this ^^ |
dustin-sale
left a comment
There was a problem hiding this comment.
Really close, my PR review skill isn't happy with the containerize make step. I think my suggestion should resolve it.
| From the repository root, build the image with the supported Podman workflow: | ||
|
|
||
| ```bash | ||
| SUBDIRS=src/oci-language-mcp-server make containerize |
There was a problem hiding this comment.
My PR review skill is still not happy with make containerize. See my comment in Makefile.
@dustin-sale Pushed the change. |
|
|
||
| from .server import main | ||
|
|
||
| if __name__ == "__main__": |
There was a problem hiding this comment.
do you need this file, given that server is the entrypoint (and has this same main check)?
There was a problem hiding this comment.
@gebhardtr Yes good catch, this was a redundant residual code. Addressed.
Description
Adds the OCI Language MCP server under
src/oci-language-mcp-server.This server provides OCI Language shared pretrained capabilities through seven typed MCP tools:
The implementation follows the repository MCP server structure and public packaging expectations:
pyproject.toml,uv.lock,README.md,CHANGELOG.md,LICENSE.txt,Containerfile,.containerignore, and theoracle/package source.oracle.oci-language-mcp-server.oracle-mcp-common.additional_user_agenttelemetry derived from package metadata for every supported outbound authentication mode.src/commonworkspace dependency is available.Fixes: N/A
Type of change
How Has This Been Tested?
Validated locally from
src/oci-language-mcp-server:pytest --cov=. --cov-branch --cov-report=term-missing87 passed91.00%uv lock --checkruff check --no-cache .GET /healthreturns{"status":"ok"}GET /readyreturns{"status":"ready"}Test Configuration:
Checklist: