You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-commits@axis.apache.org by ro...@apache.org on 2026/04/16 13:20:38 UTC

(axis-axis2-c-core) 04/04: Generalize MCP client references in docs and samples

This is an automated email from the ASF dual-hosted git repository.

robertlazarski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/axis-axis2-c-core.git

commit 3b537884c0287d8b0aecbb7ed99c44efa174c8ab
Author: Robert Lazarski <ro...@gmail.com>
AuthorDate: Wed Apr 15 14:52:23 2026 -1000

    Generalize MCP client references in docs and samples
    
    Replaces narrative mentions of specific MCP client products (Claude
    Desktop, Cursor) with vendor-neutral terminology ("an MCP client",
    "stdio-based MCP client", "the MCP host") across docs and sample
    source/build files. Concrete configuration examples are kept since
    they are load-bearing setup instructions, but framed consistently as
    "Example MCP client config (path varies by client; Claude Desktop's
    ~/.config/claude/claude_desktop_config.json shown)" so the product
    name appears once per file as a concrete example rather than being
    implied as a default or required client.
    
    The MCP protocol name itself is retained (it is a public specification
    at modelcontextprotocol.io) — only gratuitous product-name mentions
    are scrubbed.
    
    Reviewed with gemini-2.5-pro (vendor-neutrality, documentation utility,
    information-preservation, consistency, fresh-leak checks all passed).
    
    Co-Authored-By: Claude Opus 4.6 (1M context) <no...@anthropic.com>
---
 docs/MCP.md                                        | 22 +++++++++++-----------
 docs/MCP_EXAMPLES.md                               | 18 ++++++++++--------
 .../financial-benchmark-service/Makefile.am        |  5 +++--
 .../build_financial_service.sh                     |  7 ++++---
 .../financial-benchmark-service/src/finbench_mcp.c |  2 +-
 .../financial-benchmark-service/src/finbench_mcp.h |  5 +++--
 .../src/finbench_mcp_main.c                        |  3 ++-
 7 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/docs/MCP.md b/docs/MCP.md
index 2d9e72bb8..becd429fd 100644
--- a/docs/MCP.md
+++ b/docs/MCP.md
@@ -10,7 +10,7 @@ status: Active — Java A1/A2/A3 complete, C1 complete, mcpInputSchema deployed
 **Summary**: Axis2/C gains MCP (Model Context Protocol) support by porting from the
 Axis2/Java reference implementation — the same pattern used successfully for HTTP/2.
 The C implementation targets hardware where Java cannot run: edge devices, embedded
-systems, Android phones. One MCP client (Claude Desktop, Claude API) connects to
+systems, Android phones. One MCP client (stdio or HTTP) connects to
 both runtimes via identical protocol. One AI protocol, the full hardware spectrum.
 
 MCP is JSON-RPC 2.0. Three required methods: `initialize`, `tools/list`, `tools/call`.
@@ -37,11 +37,11 @@ MCP is a better candidate than HTTP/2 was:
   the only addition.
 - **stdio in C is trivial**: `fgets(stdin)` / `fprintf(stdout)`. In Java this
   requires thread management and stream handling. In C it is a 30-line loop.
-- **No JVM startup**: Claude Desktop starts MCP servers as subprocesses. JVM
+- **No JVM startup**: stdio-based MCP clients start MCP servers as subprocesses. JVM
   cold-start is 1–3 seconds. A C binary starts in under 100ms. For stdio MCP
-  (process-per-client), this is visible every time Claude Desktop opens.
+  (process-per-client), this is visible every time the MCP client opens.
 - **Port is mechanical once Java proves the protocol**: After Axis2/Java validates
-  the `initialize`/`tools/list`/`tools/call` handshake against Claude Desktop,
+  the `initialize`/`tools/list`/`tools/call` handshake against a compliant MCP client,
   the C port translates proven behavior rather than discovering it.
 
 **Estimated new C code**: ~500 lines for stdio, ~800 for HTTP/SSE. The HTTP/2 port
@@ -89,11 +89,11 @@ Android phone.
 | `springbootdemo-tomcat11` | ✅ Reference implementation, Java 25 + Tomcat 11 |
 | `/openapi-mcp.json` endpoint | ✅ Done (A1) |
 | `axis2-mcp-bridge` stdio JAR | ✅ Done (A2) — with mTLS (port 8443, IoT CA) |
-| A3 end-to-end validation | ✅ Done — Claude Desktop → bridge → mTLS → BigDataH2Service confirmed |
+| A3 end-to-end validation | ✅ Done — MCP client → bridge → mTLS → BigDataH2Service confirmed |
 | `axis2-transport-mcp` Java native | ❌ Not started (B1) |
 
 **C1 is now unblocked.** Java A2 was the gate: the JSON-RPC 2.0 handshake
-(`initialize` / `tools/list` / `tools/call`) is validated against Claude Desktop.
+(`initialize` / `tools/list` / `tools/call`) is validated against a compliant MCP client.
 The C port translates proven behavior rather than discovering it.
 
 The Java bridge uses no MCP SDK — just Jackson + Java stdlib HttpClient. The C port
@@ -204,7 +204,7 @@ static const finbench_mcp_tool_t finbench_mcp_tools[] = {
 Each `_mcp_handler` is a thin wrapper: extract arguments from `json_object *`,
 call the existing `finbench_*_json_only()` function, return the result string.
 
-**Claude Desktop config** (the demo deliverable):
+**Example MCP client config** (stdio transport; the demo deliverable):
 ```json
 {
   "mcpServers": {
@@ -293,7 +293,7 @@ assistants consume.
 
 Where the implementations compete is on the deployment edge: C runs where
 Java cannot (Android phones, IoT gateways, embedded systems) and starts
-instantly for stdio MCP (where Claude Desktop spawns a subprocess per
+instantly for stdio MCP (where the MCP client spawns a subprocess per
 session). Java runs where enterprise infrastructure already exists
 (WildFly, Tomcat, Spring Boot) with richer integration tooling.
 
@@ -315,9 +315,9 @@ services dynamically.
 **Why `isatty()` for mode detection**
 
 The same binary serves both HTTP/2 JSON (via Apache httpd as a shared library) and
-MCP stdio (as a subprocess launched by Claude Desktop). The `isatty()` check is the
+MCP stdio (as a subprocess launched by an MCP client). The `isatty()` check is the
 POSIX-standard way to detect whether stdin is connected to an interactive terminal or
-a pipe. When Claude Desktop launches the binary, stdin is a pipe — MCP mode. When
+a pipe. When an MCP client launches the binary, stdin is a pipe — MCP mode. When
 httpd loads the shared library, stdin is not opened at all.
 
 In production the binary and the shared library would be separate build targets from
@@ -361,7 +361,7 @@ is serving them.
 When C1 and Java B1 are both complete, the demonstration is:
 
 ```
-Claude Desktop
+MCP client (stdio)
     ├── axis2c-financial (stdio, $20 Android phone)
     │       portfolioVariance — 500 assets in 5ms, 30MB memory
     │       monteCarlo VaR    — 10,000 GBM simulations in 100ms
diff --git a/docs/MCP_EXAMPLES.md b/docs/MCP_EXAMPLES.md
index 7c1e02a7f..9995675ed 100644
--- a/docs/MCP_EXAMPLES.md
+++ b/docs/MCP_EXAMPLES.md
@@ -101,7 +101,7 @@ Three MCP methods handle everything:
 - `tools/list` — what calculations are available and their input schemas
 - `tools/call` — run a specific calculation with arguments
 
-The wire protocol is JSON-RPC 2.0 over stdio (Claude Desktop) or HTTP/SSE
+The wire protocol is JSON-RPC 2.0 over stdio (subprocess-based MCP clients) or HTTP/SSE
 (persistent server). Axis2/C implements stdio today; HTTP/SSE is planned.
 
 ---
@@ -147,7 +147,7 @@ curl -k --http2 -s \
 multiply-accumulate throughput — the 929M figure comes from the 500-asset
 benchmark below, not this 3-asset example.)
 
-**MCP stdio (Claude Desktop):**
+**MCP stdio (subprocess-based MCP client):**
 ```bash
 echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"portfolioVariance","arguments":{"n_assets":3,"weights":[0.4,0.3,0.3],"covariance_matrix":[0.04,0.006,0.002,0.006,0.09,0.009,0.002,0.009,0.01]}}}' \
     | /usr/local/axis2c/bin/financial-benchmark-mcp
@@ -966,13 +966,13 @@ the highest overhead.
 | Startup time | **instant** (shared lib) | 1-3 sec (interpreter/JVM startup) |
 | MCP stdio startup | **< 50 ms** | 500 ms+ (module import / classloading) |
 
-The MCP stdio startup matters because Claude Desktop launches MCP servers
+The MCP stdio startup matters because MCP clients launch MCP servers
 as subprocesses. Every time you open a conversation, the server starts. A
 50ms C startup is invisible; a 3-second JVM startup is noticeable every time.
 
 ### The bigger picture: AI assistants embedded in financial platforms
 
-The examples above show a standalone MCP server called from Claude Desktop.
+The examples above show a standalone MCP server called from a stdio-based MCP client.
 The real payoff is when the same MCP tools power an **AI assistant embedded
 directly in a portfolio management application**.
 
@@ -1019,7 +1019,7 @@ breaks the flow. The PM asks a follow-up, and the answer is already there.
 
 The same MCP protocol works for both:
 - A chat assistant embedded in a web application (HTTP/SSE transport)
-- Claude Desktop analyzing a portfolio from a terminal (stdio transport)
+- An MCP client analyzing a portfolio from a terminal (stdio transport)
 - A scheduled risk report that runs overnight (batch MCP calls)
 - A mobile app showing position alerts on a phone (lightweight client)
 
@@ -1039,10 +1039,12 @@ VaR computation on hardware that costs less than a Bloomberg terminal.
 
 ---
 
-## Claude Desktop Configuration
+## Example MCP Client Configuration
 
-To connect Claude Desktop to the Axis2/C MCP server, add to
-`~/.config/claude/claude_desktop_config.json`:
+To connect a stdio-based MCP client to the Axis2/C MCP server, add an
+entry to its configuration file. The path varies by client; Claude
+Desktop's `~/.config/claude/claude_desktop_config.json` is shown as
+an example:
 
 ```json
 {
diff --git a/samples/user_guide/financial-benchmark-service/Makefile.am b/samples/user_guide/financial-benchmark-service/Makefile.am
index 0f10b9102..e7012eb6d 100644
--- a/samples/user_guide/financial-benchmark-service/Makefile.am
+++ b/samples/user_guide/financial-benchmark-service/Makefile.am
@@ -55,10 +55,11 @@ libfinancial_benchmark_service_la_LDFLAGS = \
 
 # ─── MCP stdio binary (C1) ────────────────────────────────────────────────────
 #
-# Standalone binary launched by Claude Desktop (and Cursor) as an MCP subprocess.
+# Standalone binary launched by a stdio-based MCP client as an MCP subprocess.
 # Links financial_benchmark_service.c directly (no shared library dependency).
 #
-# Claude Desktop config (~/.config/claude/claude_desktop_config.json):
+# Example MCP client config (path varies by client; Claude Desktop's
+# ~/.config/claude/claude_desktop_config.json shown):
 #   { "mcpServers": { "axis2c-financial": {
 #       "command": "/usr/local/axis2c/bin/financial-benchmark-mcp" } } }
 
diff --git a/samples/user_guide/financial-benchmark-service/build_financial_service.sh b/samples/user_guide/financial-benchmark-service/build_financial_service.sh
index f8e868bba..e4ae308fc 100755
--- a/samples/user_guide/financial-benchmark-service/build_financial_service.sh
+++ b/samples/user_guide/financial-benchmark-service/build_financial_service.sh
@@ -22,7 +22,7 @@ echo "   • Monte Carlo VaR   - Compute-intensive simulation"
 echo "   • Scenario Analysis - Hash table lookups"
 echo ""
 echo "🤖 MCP (Model Context Protocol) binary also built:"
-echo "   • financial-benchmark-mcp — JSON-RPC 2.0 stdio, runs as Claude Desktop subprocess"
+echo "   • financial-benchmark-mcp — JSON-RPC 2.0 stdio, runs as an MCP client subprocess"
 echo ""
 
 # ── 1. Build the httpd shared library ─────────────────────────────────────────
@@ -129,9 +129,10 @@ if [ -f "libfinancial_benchmark_service.so" ] && [ -f "financial-benchmark-mcp"
     echo '        -d '\''{"n_simulations":10000,"n_periods":252,"initial_value":1000000,"expected_return":0.08,"volatility":0.20}'\'' \'
     echo '        https://localhost:443/services/FinancialBenchmarkService/monteCarlo'
     echo ""
-    echo "── MCP stdio (Claude Desktop) ──"
+    echo "── MCP stdio (stdio-based MCP client) ──"
     echo ""
-    echo "6. Add to ~/.config/claude/claude_desktop_config.json:"
+    echo "6. Add to your MCP client config (path varies by client;"
+    echo "   Claude Desktop's ~/.config/claude/claude_desktop_config.json shown):"
     echo '   {"mcpServers":{"axis2c-financial":{"command":"/usr/local/axis2c/bin/financial-benchmark-mcp"}}}'
     echo ""
     echo "7. Smoke-test MCP stdio directly:"
diff --git a/samples/user_guide/financial-benchmark-service/src/finbench_mcp.c b/samples/user_guide/financial-benchmark-service/src/finbench_mcp.c
index 486c35b1a..32e496f6c 100644
--- a/samples/user_guide/financial-benchmark-service/src/finbench_mcp.c
+++ b/samples/user_guide/financial-benchmark-service/src/finbench_mcp.c
@@ -59,7 +59,7 @@
  * Tool catalog — input schemas (snake_case, matching C service field names)
  *
  * These are the same JSON field names accepted by the HTTP/2 JSON endpoints.
- * MCP clients (Claude Desktop, Cursor) use these schemas to populate requests.
+ * MCP clients use these schemas to populate requests.
  * ============================================================================
  */
 
diff --git a/samples/user_guide/financial-benchmark-service/src/finbench_mcp.h b/samples/user_guide/financial-benchmark-service/src/finbench_mcp.h
index b21b44c2c..455becfbe 100644
--- a/samples/user_guide/financial-benchmark-service/src/finbench_mcp.h
+++ b/samples/user_guide/financial-benchmark-service/src/finbench_mcp.h
@@ -29,7 +29,8 @@
  * The same JSON request/response schemas are reused — MCP adds only the
  * JSON-RPC 2.0 framing (method, id, params.arguments, result.content).
  *
- * Usage (Claude Desktop claude_desktop_config.json):
+ * Example MCP client config (path varies by client; Claude Desktop's
+ * ~/.config/claude/claude_desktop_config.json shown):
  * @code
  * {
  *   "mcpServers": {
@@ -64,7 +65,7 @@ extern "C" {
  *
  * Reads newline-delimited JSON requests from stdin, dispatches to the
  * financial benchmark operations, and writes JSON-RPC 2.0 responses to stdout.
- * Returns when stdin reaches EOF (Claude Desktop terminates the process).
+ * Returns when stdin reaches EOF (the MCP client terminates the process).
  *
  * @param env Axis2/C environment. The associated logger MUST write to a file,
  *            not stdout. Use axutil_env_create_all("/tmp/finbench_mcp.log", ...).
diff --git a/samples/user_guide/financial-benchmark-service/src/finbench_mcp_main.c b/samples/user_guide/financial-benchmark-service/src/finbench_mcp_main.c
index 43f84cbab..f80709494 100644
--- a/samples/user_guide/financial-benchmark-service/src/finbench_mcp_main.c
+++ b/samples/user_guide/financial-benchmark-service/src/finbench_mcp_main.c
@@ -19,7 +19,8 @@
  * @file finbench_mcp_main.c
  * @brief Entry point for the financial-benchmark-mcp standalone binary (C1)
  *
- * Claude Desktop config (~/.config/claude/claude_desktop_config.json):
+ * Example MCP client config (path varies by client; Claude Desktop's
+ * ~/.config/claude/claude_desktop_config.json shown):
  * @code
  * {
  *   "mcpServers": {