{"_id":"@cnri/doip-mcp-connector","_rev":"2-6f27292e517b9f0a5365b6e49590dd5c","name":"@cnri/doip-mcp-connector","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@cnri/doip-mcp-connector","version":"1.0.0","keywords":["doip","cordra","mcp","modelcontextprotocol","mcp-server"],"author":{"name":"CNRI"},"license":"SEE LICENSE IN LICENSE.txt","_id":"@cnri/doip-mcp-connector@1.0.0","maintainers":[{"name":"cnri-admin","email":"cloud-admin@cnri.reston.va.us"}],"homepage":"https://www.cordra.org","bugs":{"url":"https://gitlab.com/cnri/cnri-doip-mcp-connector/issues"},"bin":{"doip-mcp-connector":"build/index.js"},"dist":{"shasum":"ffc9ab7b17be7715a2ad49c608a65c6e7d21548d","tarball":"https://registry.npmjs.org/@cnri/doip-mcp-connector/-/doip-mcp-connector-1.0.0.tgz","fileCount":38,"integrity":"sha512-g7uQpOz+cZ8rTsDEpPw7lGrTq9k5wP3z5a4CxLwVt9sWGU3YilWqF4coyS8QF7szNMdWp0dFqKYFj7zrGMnSSg==","signatures":[{"sig":"MEUCIAXxVcLh8PkImGYIayvSG9BTa70BIJWT+LysluOk5G46AiEAyeKnQ70T7HP3jmkdD69XpPZQy2Ry1RdfCUb+znDWUac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93882},"main":"./build/index.js","type":"module","_from":"file:cnri-doip-mcp-connector-1.0.0.tgz","types":"./build/types/index.d.ts","exports":{"types":"./build/index.d.ts","default":"./build/index.js"},"_npmUser":{"name":"cnri-admin","email":"cloud-admin@cnri.reston.va.us"},"_resolved":"/Users/schneck/doip-mcp-connector/cnri-doip-mcp-connector-1.0.0.tgz","_integrity":"sha512-g7uQpOz+cZ8rTsDEpPw7lGrTq9k5wP3z5a4CxLwVt9sWGU3YilWqF4coyS8QF7szNMdWp0dFqKYFj7zrGMnSSg==","repository":{"url":"git+https://gitlab.com/cnri/cnri-doip-mcp-connector.git","type":"git"},"_npmVersion":"10.9.0","description":"MCP server for connecting to a DOIP service","directories":{},"_nodeVersion":"22.11.0","dependencies":{"yaml":"^2.8.0","winston":"^3.17.0","package-up":"^5.0.0","word-extractor":"^1.0.4","pdf-text-reader":"^5.1.0","@cnri/doip-client":"^1.1.0","office-text-extractor":"^3.0.3","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/doip-mcp-connector_1.0.0_1757123119578_0.13180839773291542","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cnri/doip-mcp-connector","version":"1.1.0","license":"SEE LICENSE IN LICENSE.txt","description":"MCP server for connecting to a DOIP service","author":{"name":"CNRI"},"keywords":["doip","cordra","mcp","modelcontextprotocol","mcp-server"],"homepage":"https://www.cordra.org","repository":{"type":"git","url":"git+https://gitlab.com/cnri/cnri-doip-mcp-connector.git"},"type":"module","exports":{"types":"./build/index.d.ts","default":"./build/index.js"},"types":"./build/types/index.d.ts","main":"./build/index.js","bin":{"doip-mcp-connector":"build/index.js"},"dependencies":{"@cnri/doip-client":"^1.1.0","@modelcontextprotocol/sdk":"^1.12.1","office-text-extractor":"^3.0.3","package-up":"^5.0.0","pdf-text-reader":"^5.1.0","winston":"^3.17.0","word-extractor":"^1.0.4","yaml":"^2.8.0"},"_id":"@cnri/doip-mcp-connector@1.1.0","bugs":{"url":"https://gitlab.com/cnri/cnri-doip-mcp-connector/issues"},"_integrity":"sha512-kCOIyF3Lj15+seMQBQmBSOk+PbFPbRI/n/tZtPqTGH9N/hCUjOFe30isy5v7vizvF20oVXfYttLTKmt1ZX1ntQ==","_resolved":"/Users/schneck/doip-mcp-connector/cnri-doip-mcp-connector-1.1.0.tgz","_from":"file:cnri-doip-mcp-connector-1.1.0.tgz","_nodeVersion":"22.11.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-kCOIyF3Lj15+seMQBQmBSOk+PbFPbRI/n/tZtPqTGH9N/hCUjOFe30isy5v7vizvF20oVXfYttLTKmt1ZX1ntQ==","shasum":"21b959ac767f1a8a62e3c8190325275e0afd72bc","tarball":"https://registry.npmjs.org/@cnri/doip-mcp-connector/-/doip-mcp-connector-1.1.0.tgz","fileCount":38,"unpackedSize":94002,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBBIzF1FaE/SATtmiT6kEeHH03jn0ge/Jni7tusRD0FoAiBOHl0SMZSqkOYO97KJfDmdm8E92GWsFg7I1N1Eo8sYXw=="}]},"_npmUser":{"name":"cnri-admin","email":"cloud-admin@cnri.reston.va.us"},"directories":{},"maintainers":[{"name":"cnri-admin","email":"cloud-admin@cnri.reston.va.us"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/doip-mcp-connector_1.1.0_1757186551365_0.8568018736694105"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-06T01:45:19.494Z","modified":"2025-09-06T19:22:31.768Z","1.0.0":"2025-09-06T01:45:19.794Z","1.1.0":"2025-09-06T19:22:31.579Z"},"bugs":{"url":"https://gitlab.com/cnri/cnri-doip-mcp-connector/issues"},"author":{"name":"CNRI"},"license":"SEE LICENSE IN LICENSE.txt","homepage":"https://www.cordra.org","keywords":["doip","cordra","mcp","modelcontextprotocol","mcp-server"],"repository":{"type":"git","url":"git+https://gitlab.com/cnri/cnri-doip-mcp-connector.git"},"description":"MCP server for connecting to a DOIP service","maintainers":[{"name":"cnri-admin","email":"cloud-admin@cnri.reston.va.us"}],"readme":"# DOIP-MCP Connector\n\n## Introduction\n\nThis project is a locally run MCP server that connects to an\nimplementation of a DOIP service, such as that provided by a Cordra\nserver.  It provides an MCP-enabled client application access to the\nstandard DOIP operations search, retrieve, create, update, and delete,\nas well as any custom operations the DOIP service makes available.\n\nThe DOIP-MCP Connector requires [CNRI's DOIP Client Library -\nJavaScript Version](https://www.npmjs.com/package/@cnri/doip-client).\n\n## Prerequisites\n\n### DOIP Service\n\nYou will need to install or have access to a DOIP service such as a\nCordra server. You will need the IP address and port of the server's\nDOIP interface as well as the user credentials you want the\nDOIP-MCP Connector to use when making requests.\n\n### Node.js\n\nThe DOIP-MCP Connector runs on Node.js and requires Node.js v22 or\nlater.\n\n### MCP-enabled Client Application\n\nThis document assumes you will be using the Claude Desktop App as an\nMCP client. Other clients can be used assuming they support MCP\nservers with stdio transport.\n\n## Installation and Configuration\n\nCreate a file `config.json` to point at your DOIP service:\n\n```json\n{\n    \"authentication\": {\n        \"username\": \"admin\",\n        \"password\": \"password\"\n    },\n    \"serviceInfo\": {\n        \"ipAddress\": \"localhost\",\n        \"port\": 9000\n    }\n}\n```\n\nYou may wish to include the property `\"readOnly\": true` if you do not\nwant to allow the MCP-enabled client application to use create,\nupdate, or delete.\n\nYou can include an optional property `\"toolPrefix\"` which is a string\nthat will be prepended to each of the tool names (including for\nexample \"search\" and \"retrieve\") advertised to the MCP-enabled client\napplication. This can help the client application distinguish\ndifferent instances of the DOIP-MCP Connector talking to different\nDOIP services.\n\nYou will need to configure the MCP-enabled client application to start\nthe DOIP-MCP Connector.\n\n#### To install from DXT file into Claude Desktop:\n\n1. In Claude Desktop, go to \"Settings\" -> \"Extensions\" -> \"Advanced Settings\" -> \"Install Extension\"\n2. Select the DXT file, click \"Install\", confirm\n3. Browse to your config.json file and click \"Save\"\n4. Click the slider from \"Disabled\" to \"Enabled\"\n5. Close the settings and go back to Claude chats.\n\n#### To install from published NPM package via `claude_desktop_config.json`:\n\nFor Claude Desktop, you need to edit the file `claude_desktop_config.json`.\nTo find this file:\n1. Run the Claude Desktop app\n2. From the menu bar select **Claude** → **Settings...**\n3. Select the **\"Developer\"** tab\n4. Click the **\"Edit Config\"** button\n\nThat will bring up a file browser pointing at the folder that contains\nthe `claude_desktop_config.json` file.\n\nEdit the file adding the DOIP-MCP Connector to the map of MCP servers;\nyou will need to include the file location of your `config.json` file.\n\n```json\n{\n    \"mcpServers\": {\n        \"doip-mcp-connector\": {\n            \"command\": \"npx\",\n            \"args\": [\n                \"-y\",\n                \"@cnri/doip-mcp-connector\",\n                \"/path/to/config.json\"\n            ]\n        }\n    }\n}\n```\n\n**Note:** You may need to edit the \"command\" to point at the correct\nversion of npx.\n\nYou can now restart the Claude Desktop App and it should start the\nDOIP-MCP Connector and list the available tools.\n\nCheck that it is working by prompting Claude with \"What DOIP operations can\nyou perform?\"\n\n## Custom DOIP Operations\n\nIn the below example JavaScript we implement in Cordra a custom\noperation `getNthPrime`, which returns the prime number specified\nin the `n` argument.\n\nIn order to make this operation available to the MCP-enabled client\napplication, we need to describe the operation.  This is done by\nimplementing a custom operation\n`20.DOIP/Op.ListOperationsForTypeWithDetails` as a static operation to\nbe performed on a type (Schema) object and/or as a service-level\noperation.  The DOIP-MCP Connector, on startup, will invoke the\n`20.DOIP/Op.ListOperationsForTypeWithDetails` as a service-level\noperation and for all type (Schema) objects found via search, in order\nto discover what custom operations are available.\n\nThe operation `20.DOIP/Op.ListOperationsForTypeWithDetails` returns an\narray of JSON objects, where each object describes a custom\noperation. Each operation description can have:\n- id (required): the identifier of the operation\n- description (required): a human-readable description\n- attributesSchema (optional): a JSON Schema describing the attributes\n  expected by the operation\n- inputSchema (optional): a JSON Schema describing the input expected\n  by the operation\n- annotations (optional): an MCP tool annotations object (see MCP\n  documentation for details)\nIf the operation is a static operation to be performed on the type\nobject itself instead of an object of that type, you will need to\ninclude `\"isStatic\": true`.\n\nTo use this sample, in Cordra UI:\n\n1. Sign in as admin.\n2. From the Admin menu select \"Design JavaScript\".\n3. Copy the below JavaScript into the JavaScript editor.\n4. Click the \"Save\" button.\n5. You will need to restart the Claude Desktop App for it to discover\n   the new operation.\n\nTo test that the operation is available in Claude as an MCP tool use\nthe following prompt:\n\n\"Use a DOIP operation to calculate the 11th prime number\"\n\n```js\nexports.staticMethods = {};\nexports.staticMethods.getNthPrime = getNthPrime;\nexports.staticMethods[\"20.DOIP/Op.ListOperationsForTypeWithDetails\"] = listOperationsForTypeWithDetails;\n\nfunction getNthPrime(context) {\n    let n = context.params.n;\n    let count = 0, num = 1;\n    while (count < n) {\n        num++;\n        let isPrime = true;\n        for (let i = 2; i * i <= num; i++) {\n            if (num % i === 0) {\n                isPrime = false;\n                break;\n            }\n        }\n        if (isPrime) count++;\n    }\n    return num;\n}\n\nfunction listOperationsForTypeWithDetails(obj, context) {\n    return [\n        {\n            isStatic: true,\n            id: \"getNthPrime\",\n            description: \"Get the nth prime\",\n            inputSchema: {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"n\": {\n                        \"type\": \"integer\",\n                        \"minimum\": 1,\n                        \"maximum\": 10000,\n                        \"description\": \"The position of the prime number to find (e.g. 5 for the 5th prime)\"\n                    }\n                },\n                \"additionalProperties\": false\n            }\n        }\n    ];\n}\n```\n\n## License\n\nSee the [LICENSE.txt](https://www.cordra.org/assets/licenses/doip-mcp-connector/LICENSE.txt) file for details.\n","readmeFilename":"README.md"}