by oracle
Provides reference implementations of Model Context Protocol servers that enable standardized, language‑agnostic interactions with Oracle cloud services and products.
The repository offers a collection of polyglot MCP server implementations—written in Python, JavaScript, Java, and other languages—that expose Oracle product toolsets to MCP‑compatible clients. These servers serve as proof‑of‑concept reference code for learning, prototyping, and extending Oracle cloud workflows.
src/ directory.uv for Python, npm for JavaScript, JDK for Java).uvx oracle.oci-cloud-mcp-server@latest) or inside a container with Podman.src/<server> can be written in a different language, showcasing MCP’s language‑agnostic nature.oci-cloud-mcp-server and oci-api-mcp-server provide direct access to Oracle Cloud Infrastructure via SDK or CLI.uvx and Podman images.Q: Are these servers production‑ready?\nA: They are reference implementations intended for exploration and prototyping, not for production use.
Q: Which runtimes are required?\nA: Depends on the server—Python 3.13 (via uv), Node.js (via npm), Java 17+, or other language‑specific runtimes. Check each src/<server>/README.md.
Q: How do I run a server in a container?\nA: Build with make containerize (e.g., SUBDIRS=src/oci-api-mcp-server make containerize) and run with podman run exposing the required ports and mounting OCI credentials.
Q: Can I use the servers with other MCP clients?\nA: Yes. The README includes configuration snippets for Cline, Cursor, and MCPHost, and the JSON format is compatible with any MCP‑compatible client.
Q: How do I publish my own MCP server?\nA: Follow the publishing section—use uv publish for Python packages (test or production PyPI) and npm publish for JavaScript packages.
Repository containing reference implementations of MCP (Model Context Protocol) servers for managing and interacting with Oracle products. Each MCP server under src/ may be written in a different programming language, demonstrating MCP’s language-agnostic approach.
The Model Context Protocol (MCP) enables standardized, language-agnostic machine-to-machine workflows across data, models, and cloud resources. MCP servers implement specific tool suites, exposing them to MCP-compatible clients.
Proof-of-concept/Reference implementations:
This repository is not intended for production use; servers are provided as reference and for exploration, prototyping, and learning.
Polyglot architecture:
Each src/<server-name>/ directory represents a distinct MCP server, and these may use Python, Node.js, Java, or other languages.
Note:
Each MCP server has its own specific requirements (e.g., language runtime version, libraries).
Always see the respective src/<server>/README.md for detailed setup instructions.
Follow these instructions to get started as quickly as possible. Once finished, look here to set up your local development environment if you wish to contribute changes.
uv from hereuv python install 3.13For most OCI users, start with oci-cloud-mcp-server. It uses the official OCI Python SDK directly, without OCI CLI subprocess calls, and is the recommended general-purpose entry point for OCI workflows.
Use oci-api-mcp-server instead when you specifically want an MCP server backed by the OCI CLI. It exposes tools for discovering and running OCI CLI commands.
Choose one of the other purpose-built servers when you already know the Oracle product or OCI domain you want to work with. These servers target specific service and product workflows rather than providing a general OCI entry point. Browse the src/ directories and read the relevant src/<server>/README.md before configuring one.
Run the server over stdio:
uvx oracle.oci-cloud-mcp-server@latest
Then add this minimal configuration to your MCP client. Replace <profile_name> with the OCI CLI profile configured during authentication.
For macOS/Linux:
{
"mcpServers": {
"oracle-oci-cloud-mcp-server": {
"command": "uvx",
"args": [
"oracle.oci-cloud-mcp-server@latest"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Use this CLI-backed option when you specifically need OCI CLI commands:
uvx oracle.oci-api-mcp-server@latest
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"command": "uvx",
"args": [
"oracle.oci-api-mcp-server@latest"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
To connect to an OCI MCP server running in HTTP streaming mode: Assuming you started the server by running:
ORACLE_MCP_HOST=127.0.0.1 ORACLE_MCP_PORT=8888 ORACLE_MCP_BASE_URL=http://127.0.0.1:8888 OCI_REGION=us-phoenix-1 IDCS_DOMAIN=<idcs_domain> IDCS_CLIENT_ID=<client_id> IDCS_CLIENT_SECRET=<client_secret> IDCS_AUDIENCE=<audience> uvx oracle.oci-cloud-mcp-server
Register ${ORACLE_MCP_BASE_URL}/auth/callback as a redirect URI in the OCI IAM confidential application for the server.
then place the following in your MCP client configuration:
:warning: NOTE: the type attribute differs across MCP clients; some use http as the
transport value while others (like Cline) expect streamableHttp.
{
"mcpServers": {
"oracle-oci-cloud-mcp-server": {
"type": "streamableHttp",
"url": "http://127.0.0.1:8888/mcp"
}
}
}
oracle.oci-api-mcp-server is stdio-only. For OCI HTTP servers, IDCS_REQUIRED_SCOPES is optional; if unset, the default is openid profile email oci_mcp.<server_name>.invoke, where <server_name> is the package name without oracle.oci- and -mcp-server, with - replaced by _. For example, oracle.oci-cloud-mcp-server defaults to openid profile email oci_mcp.cloud.invoke.
Some MCP servers in this repository support running via podman.
Use the following instructions to install and run podman
https://podman.io/docs/installation
You can build the container image using the following command. The command shows building the container image for the oci-api-mcp-server.
SUBDIRS=src/oci-api-mcp-server make containerize
The above command builds the container image tagged as oracle.oci-api-mcp-server:latest.
For examples of configuring MCP clients to run the server using podman, see the client-specific sections below. Configurations typically involve using podman run as the command, with appropriate flags and volume mounts for credentials if needed (e.g., mounting ~/.oci for OCI servers running over stdio transport).
Alternatively, if you want to use HTTP transport using the podman container, then start an OCI HTTP-capable MCP server using the following command and configure your client as mentioned in Quickstart section above.
podman run -e ORACLE_MCP_HOST=0.0.0.0 -e ORACLE_MCP_PORT=8888 -e ORACLE_MCP_BASE_URL=http://127.0.0.1:8888 -e OCI_REGION=us-phoenix-1 -e IDCS_DOMAIN=<idcs_domain> -e IDCS_CLIENT_ID=<client_id> -e IDCS_CLIENT_SECRET=<client_secret> -e IDCS_AUDIENCE=<audience> -p 127.0.0.1:8888:8888 oracle.oci-cloud-mcp-server:latest
For local development, keep -p 127.0.0.1:8888:8888. Changing it to -p 8888:8888 exposes the server beyond localhost.
For OCI MCP servers running over stdio transport:
oci session authenticate --region=<region> --tenancy-name=<tenancy_name>
where:
<region> is the region you would like to authenticate in (e.g. us-phoenix-1)
<tenancy_name> is the name of your OCI tenancy
Some MCP servers may not work with token-based authentication alone. See more about API key-based authentication here.
All stdio actions are performed with the permissions of the configured OCI CLI profile. We advise least-privilege IAM setup, secure credential management, safe network practices, secure logging, and warn against exposing secrets.
Remember to refresh the session once it expires with:
oci session authenticate --profile-name <profile_name> --region <region> --auth security_token
<profile_name> is the profile that you set up in the steps above. You can view a list of your profiles by running cat ~/.oci/config on macOS/Linux if you forget which profile you have set up.
For OCI MCP servers running over HTTP transport, use an OCI IAM confidential application and set IDCS_DOMAIN, IDCS_CLIENT_ID, IDCS_CLIENT_SECRET, IDCS_AUDIENCE, ORACLE_MCP_BASE_URL, ORACLE_MCP_HOST, ORACLE_MCP_PORT, and OCI_REGION. Register ${ORACLE_MCP_BASE_URL}/auth/callback as a redirect URI in that application. HTTP requests run as the authenticated OCI IAM user and do not use the local OCI CLI profile for request authentication. IDCS_REQUIRED_SCOPES is optional; if unset, the server defaults to openid profile email oci_mcp.<server_name>.invoke. Create and grant that custom scope in your confidential application, or override it with IDCS_REQUIRED_SCOPES.
For server authors, the shared library keeps credential resolution and HTTP token exchange consistent while each server retains its listener, service client lifecycle, and derived user agent. See the shared authentication module for the full configuration matrix and the HTTP IDCS authentication section for the provider and per-request token-exchange API. HTTP-derived OCI clients must be treated as caller-specific and must not be reused across callers.
Each MCP server exposes endpoints that your client can connect to. To enable this connection, just add the relevant server to your MCP client’s configuration file. You can find the list of servers under the src folder.
Refer to the sections below for client-specific configuration instructions.
Before continuing, make sure you have already followed the steps above in the Quick start section.
cline_mcp_settings.json file.cline_mcp_settings.json file, add your desired MCP servers in the mcpServers object. Below is an example for for the generic OCI API MCP server. Make sure to save the file after editing. <profile_name> is the profile that you set up during the authentication steps.For macOS/Linux:
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"oracle.oci-api-mcp-server@latest"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Alternatively, to run using podman (example for oracle.oci-api-mcp-server):
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"autoApprove": [],
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "podman",
"args": ["run", "-i", "--rm", "-v", "/path/to/your/.oci:/app/.oci", "oracle.oci-api-mcp-server:latest"],
"env": {
"FASTMCP_LOG_LEVEL": "INFO"
}
}
}
}
Replace "/path/to/your/.oci" with the actual path to your OCI configuration directory.
⚠️ NOTE: Ensure that the key_file field in /path/to/your/.oci/config uses the ~ character so that the path resolves both inside and outside the container; for example: key_file=~/.oci/oci_api_key.pem.
For servers not requiring OCI credentials, omit the -v volume mount.
For Windows - TODO
Before continuing, make sure you have already followed the steps above in the Quick start section.
Project Configuration: For tools specific to a project, create a .cursor/mcp.json file in your project directory. This allows you to define MCP servers that are only available within that specific project.
Global Configuration: For tools that you want to use across all projects, create a ~/.cursor/mcp.json file in your home directory. This makes MCP servers available in all your Cursor workspaces.
.cursor/mcp.json
For macOS/Linux:
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"oracle.oci-api-mcp-server"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Alternatively, to run using podman (example for oracle-oci-api-mcp-server):
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "podman",
"args": ["run", "-i", "--rm", "-v", "/path/to/your/.oci:/app/.oci", "oracle.oci-api-mcp-server:latest"],
"env": {
"FASTMCP_LOG_LEVEL": "INFO"
}
}
}
}
Replace "/path/to/your/.oci" with the actual path to your OCI configuration directory.
For servers not requiring OCI credentials, omit the -v volume mount.
<profile_name> is the profile that you set up during the authentication steps.
For Windows - TODO
.cursor/mcp.json was properly configured.Before continuing, make sure you have already followed the steps above in the Quick start section.
For macOS: If installed via the official installer, ollama start. If installed via homebrew, brew services start ollama
For Windows: If installed via the official installer, the server is typically configured to start automatically in the background and on system boot.
For Linux: sudo systemctl start ollama
curl http://localhost:11434. A successful response will typically be "Ollama is running".<model> is the name of your desired model (e.g. llama3.2), with ollama pull <model>. For more options, check Ollama's list of models that support tool calling.go from heremcphost with go install github.com/mark3labs/mcphost@latestexport PATH=$PATH:~/go/bin~/.mcphost.json). Check here for more info.mcpServers object. Below is an example for for the compute OCI MCP server. Make sure to save the file after editing.For macOS/Linux:
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"oracle.oci-api-mcp-server"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
Alternatively, to run using podman (example for oracle-oci-api-mcp-server):
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "podman",
"args": ["run", "-i", "--rm", "-v", "/path/to/your/.oci:/app/.oci", "oracle.oci-api-mcp-server:latest"],
"env": {
"FASTMCP_LOG_LEVEL": "INFO"
}
}
}
}
Replace "/path/to/your/.oci" with the actual path to your OCI configuration directory.
For servers not requiring OCI credentials, omit the -v volume mount.
<profile_name> is the profile that you set up during the authentication steps.
For Windows - TODO
mcphost with OCI_CONFIG_PROFILE=<profile> mcphost -m ollama:<model> --config <config-path>
<model> is the model you chose above<profile> is the name of the OCI CLI profile that you set up above<config-path> is the path to the mcphost configuration json file that you made aboveThis section will help you set up your environment to prepare it for local development if you wish to contribute changes.
Set up python virtual environment and install dev requirements
uv venv --python 3.13 --seed
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -r requirements-dev.txt
Locally build and install servers within the virtual environment
make build
make install
Note: If you want to run commands in a single server project, you can add the project variable to only run commands for that specific project
For example: make project=oci-compute-mcp-server build will only build the compute mcp server
Below is an example MCP client configuration for a typical python server using the local server package
(For Node.js/Java/other servers, follow respective instructions in that server’s README)
For macOS/Linux:
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"command": "uv",
"args": [
"run",
"oracle.oci-api-mcp-server"
],
"env": {
"VIRTUAL_ENV": "<path to your cloned repo>/mcp/.venv",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
where <path to your cloned repo> is the absolute path to wherever you cloned this repo that will help point to the venv created above (e.g. /Users/myuser/dev/mcp/.venv)
Most servers in this repository are Python packages managed with uv. JavaScript servers are first-class MCP servers too, but they use npm and are intentionally excluded from the Python package loop.
The OCI JavaScript MCP server lives in src/oci-javascript-mcp-server:
cd src/oci-javascript-mcp-server
npm install
npm test
npm run check
From the repository root, you can run the JavaScript package targets with:
make javascript-sync
make javascript-test
make javascript-check
make javascript-ci
.
├── src/
│ ├── oci-api-mcp-server/ # MCP server (Python package)
│ ├── oci-javascript-mcp-server/ # MCP server (Node.js package)
│ ├── oracle-db-mcp-java-toolkit/ # MCP server (Java package)
│ └── ...
├── LICENSE.txt
├── README.md
├── CONTRIBUTING.md
└── SECURITY.md
Each server subdirectory includes its own README.md with language/runtime details, installation, and usage.
You can modify the settings of your MCP client to run your local server. Open your client json settings file and update it as needed. For instance:
{
"mcpServers": {
"oracle-oci-api-mcp-server": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"oracle.oci-api-mcp-server"
],
"env": {
"VIRTUAL_ENV": "<path to your cloned repo>/oci-mcp/.venv",
"FASTMCP_LOG_LEVEL": "ERROR"
}
}
}
}
where <absolute path to your server code> is the absolute path to the server code, for instance
/Users/myuser/dev/oci-mcp/src/oci-identity-mcp-server/oracle/oci_identity_mcp_server.
To build and test servers running in HTTP transport mode:
make build
make install
then start the server:
VIRTUAL_ENV=$(pwd)/.venv ORACLE_MCP_HOST=127.0.0.1 ORACLE_MCP_PORT=8888 uv run oracle.oci-api-mcp-server
The Model Context Protocol (MCP) provides Inspector which is a developer tool for testing and debugging MCP servers. More information on Inspector can be found in the documentation.
The Inspector runs directly through npx without requiring installation. For instance, to inspect your locally developed server, you can run:
npx @modelcontextprotocol/inspector \
uv \
--directory <absolute path to your server code> \
run \
server.py
Inspector will run your server on localhost (for instance: http://127.0.0.1:6274) which should automatically open the tool for debugging and development.
make lint
make test
make javascript-test
make javascript-check
To run both the Python and JavaScript checks from the repository root:
make ci
The standard Python server projects and the JavaScript MCP server can also be
orchestrated with moon. Tool versions are pinned in
.prototools; after installing proto,
install the pinned tools and run tasks from the repository root:
proto install
moon run oci-compute-mcp-server:test
moon run oci-javascript-mcp-server:ci
moon run :lint
moon run :build
Moon uses each project's language-specific package definition: pyproject.toml
and uv.lock for Python, and package.json and package-lock.json for
JavaScript. The JavaScript tasks are inferred from the existing npm scripts.
Other projects excluded from the repository-level Make targets are not part of
this Moon rollout and continue to use the validation commands in their own
README.
Publish packages to PyPI test registry:
UV_PUBLISH_TOKEN=$(cat /path/to/testpypi/token-file) make test-publish
Verify installation:
uv run --index=https://test.pypi.org/simple <mcp server package>
example:
uv run --index=https://test.pypi.org/simple oracle.oci-api-mcp-server
[!IMPORTANT] NOTE: The
UV_PUBLISH_TOKENdiffers for Test PyPI and PyPI.
UV_PUBLISH_TOKEN=$(cat /path/to/pypi/token-file) make publish
JavaScript packages are published separately through npm. Before publishing
src/oci-javascript-mcp-server, run npm run ci from that package directory;
the repository-level make publish target publishes only the Python packages.
This project welcomes contributions from the community. Before submitting a pull request, please review our contribution guide.
Please consult the security guide for our responsible security vulnerability disclosure process.
Copyright (c) 2025 Oracle and/or its affiliates.
Released under the Universal Permissive License v1.0 as shown at
https://oss.oracle.com/licenses/upl/.
Developers choosing to distribute a binary implementation of this project are responsible for obtaining and providing all required licenses and copyright notices for the third-party code used in order to ensure compliance with their respective open source licenses.
Users are responsible for their local environment and credential safety. Different language model selections may yield different results and performance.
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by webiny
A self‑hosted, serverless CMS platform built on AWS that enables developers to extend content management with TypeScript code and AI‑assisted tooling.
by awslabs
Provides specialized servers that expose AWS capabilities through the Model Context Protocol, enabling AI assistants to retrieve up-to-date documentation, execute API calls, and automate infrastructure workflows directly within development environments.
by cloudflare
Provides a collection of Model Context Protocol servers that enable MCP‑compatible clients to interact with Cloudflare services such as Workers, Observability, Radar, and more, allowing natural‑language driven management of configurations, data, and operations.
by aws
Enables AI coding agents to work with AWS services by providing built‑in plugins, skill libraries, and an MCP server that offers full API access, sandboxed script execution, and real‑time documentation search.
by Flux159
Connects to a Kubernetes cluster and offers a unified MCP interface for kubectl, Helm, port‑forwarding, diagnostics, and non‑destructive read‑only mode.
by awslabs
Wrap existing stdio‑based MCP servers to run as AWS Lambda functions, exposing them via HTTPS, API Gateway, Bedrock AgentCore, Lambda function URLs or the Lambda Invoke API.
by TencentEdgeOne
Deploy HTML, folders, or zip archives to EdgeOne Pages and instantly obtain a public URL for fast edge delivery.
by volcengine
A comprehensive collection of Model Context Protocol (MCP) servers that expose Volcengine cloud resources and third‑party services through natural‑language interfaces, enabling AI‑driven operations across compute, storage, databases, networking, security, and developer utilities.
by rishikavikondala
Provides Model Context Protocol tools for performing AWS S3 and DynamoDB operations, with automatic logging and audit access via the `audit://aws-operations` endpoint.
{
"mcpServers": {
"oci-javascript-mcp-server": {
"command": "npx",
"args": [
"-y",
"oci-javascript-mcp-server"
],
"env": {
"OCI_CONFIG_PROFILE": "<profile_name>"
}
}
}
}claude mcp add oci-javascript-mcp-server npx -y oci-javascript-mcp-server