learning-mcp-server
learning-mcp-server
A minimal MCP server (three toy tools: add, echo, current_time) meant purely
for learning how MCP servers deploy and run on SAP BTP's Cloud Foundry trial
environment. No auth, no SAP backend calls — just get something running end to end.
Step 1 — Get a trial account
Go to https://www.sap.com/products/technology-platform/trial.html and sign up (SAP account required; free, no time-limited data beyond the 90-day trial window).
After signup you land in the SAP BTP cockpit with a subaccount and a Cloud Foundry space already created for you.
Keep in mind while you're learning: the trial account is for personal, non-production exploration only, resets after 90 days (or 30 days of inactivity), and has no SLA. That's all fine for this purpose.
Step 2 — Enable Cloud Foundry environment
In the cockpit, open your subaccount → Cloud Foundry Environment.
If it's not already enabled, click Enable Cloud Foundry, choose the free/trial plan, keep defaults, and create it.
Note the API Endpoint shown here (something like
https://api.cf.us10-001.hana.ondemand.com) — you'll need it to log in.A default space (usually called
dev) is created automatically.
Step 3 — Install the Cloud Foundry CLI
Install cf from https://github.com/cloudfoundry/cli#installers-and-compressed-binaries
(or via your package manager, e.g. brew install cloudfoundry/tap/cf-cli on macOS).
Verify:
cf --versionStep 4 — Log in
Trial accounts authenticate via SSO passcode rather than username/password:
cf login -a <API-ENDPOINT-FROM-STEP-2> --ssoThis prints a URL — open it in your browser, copy the one-time passcode shown there,
and paste it back into the terminal prompt. Then select your org and the dev space
when prompted (or run cf target -o <your-org> -s dev afterward).
Step 5 — Deploy the server
From this project folder:
cf pushcf push reads manifest.yml, uploads the code, builds it with the Python buildpack,
and starts it. When it finishes, it prints a route — something like:
routes: learning-mcp-server-<random>.cfapps.us10-001.hana.ondemand.comThat's your server's public HTTPS URL. Your MCP endpoint is at <that-url>/mcp.
Important for learning purposes only: this deployment has no authentication — anyone with the URL could call it. That's acceptable for a throwaway trial-account experiment, but never deploy an unauthenticated server like this with real data or real SAP system access behind it.
Step 6 — Test it
The easiest way to poke at it directly is the official MCP Inspector:
npx @modelcontextprotocol/inspectorThis opens a local web UI. Choose Streamable HTTP as the transport, paste in
https://<your-route>/mcp, connect, and you should see the three tools
(add, echo, current_time) listed — click one to try it.
Step 7 — Connect it to Claude Desktop (optional)
Claude Desktop's config expects a local command, but remote Streamable HTTP servers
can be bridged in via mcp-remote:
{
"mcpServers": {
"learning-server": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://<your-route>/mcp"]
}
}
}Restart Claude Desktop and ask it to add two numbers or echo some text.
Useful commands while learning
cf logs learning-mcp-server --recent # see recent logs (crash cause etc.)
cf logs learning-mcp-server # tail live logs
cf apps # list deployed apps and their routes/state
cf restart learning-mcp-server # restart after config changes
cf delete learning-mcp-server # tear it down, free up memory quotaWhere to go from here
Once this deploys and responds correctly:
Add a tool that calls a real SAP API (e.g. a public S/4HANA sandbox OData service, no auth needed to start).
Then introduce a BTP Destination instead of a hardcoded URL.
Then add authentication (SAP Cloud Identity Services / XSUAA) in front of the server, following the security pattern from the earlier architecture discussion.
Each of those is a small, isolated next step — happy to scaffold any of them when you're ready.