ebl-mcp-server
0
EBL MCP Server is a Model Context Protocol server designed to manage electronic Bills of Lading, providing functions to issue, query, transfer, and surrender eBLs. Built using TypeScript and Node.js, it leverages the @modelcontextprotocol/sdk framework for its core operations.
EBL MCP Server
This project implements a Model Context Protocol (MCP) server to manage electronic Bills of Lading (eBLs). It provides functionalities to issue, query, transfer, and surrender eBLs.
Technology Stack
- Language: TypeScript
- Package Manager: pnpm
- Runtime: Node.js
- Framework: @modelcontextprotocol/sdk
Core Features
- Issue eBL: Create and register a new electronic Bill of Lading.
- Query eBL: Retrieve details of existing eBLs.
- Transfer eBL: Change the holder/owner of an eBL.
- Surrender eBL: Mark an eBL as surrendered, typically upon cargo delivery.
Getting Started
Prerequisites
- Node.js (LTS version recommended)
- pnpm (Install via
npm install -g pnpm
)
Installation
- Clone the repository:
git clone <your-repo-url> cd ebl-mcp-server
- Install dependencies:
pnpm install
Running the Server
- Development Mode:
pnpm dev
- Production Mode:
(Note: Build and start scripts need to be defined inpnpm build pnpm start
package.json
)
Project Structure (Initial Idea)
ebl-mcp-server/
├── src/
│ ├── index.ts # Main application entry point
│ ├── routes/ # API route definitions
│ ├── controllers/ # Request handlers
│ ├── services/ # Business logic
│ ├── models/ # Data models/interfaces (e.g., eBL structure)
│ ├── middleware/ # Custom middleware (auth, logging, etc.)
│ └── config/ # Configuration files
├── test/ # Unit and integration tests
├── .env.example # Environment variable template
├── .gitignore
├── package.json
├── pnpm-lock.yaml
├── tsconfig.json
├── README.md # This file
└── PLAN.md # Development plan
Contributing
We welcome contributions to improve the EBL MCP Server! Please follow these guidelines to ensure a smooth collaboration:
Development Workflow
- Fork the repository and create a feature branch from
main
- Install dependencies with
pnpm install
- Make your changes following our coding standards
- Add tests for new functionality
- Run tests to ensure everything works as expected
- Submit a pull request
Coding Standards
- Write TypeScript code with proper type definitions
- Follow functional programming paradigms; avoid using classes
- Ensure all functions are pure and side-effect free when possible
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError)
- Structure files: exported component, subcomponents, helpers, static content
- Implement comprehensive error handling using @modelcontextprotocol/sdk's mechanisms
Pull Request Process
- Update documentation to reflect any changes
- Ensure code passes all tests
- Get approval from at least one maintainer
- Maintain clean commit history with meaningful commit messages
Reporting Issues
If you find a bug or have a feature request, please create an issue providing:
- A clear description of the problem/request
- Steps to reproduce (for bugs)
- Expected and actual behavior (for bugs)
- Any relevant logs or screenshots
License
This project is licensed under the Apache License, Version 2.0 - see the file for details.
Samples
Issue eBL
{
"method": "tools/call",
"params": {
"name": "issue_ebl",
"arguments": {
"requester_bu_id": "did:openebl:3993ace7-eb6c-4a1f-bed8-121643a278c9",
"file_content": {
"url": "https://flash-store.kevin-a65.workers.dev/file/pStQB1tvsV89Ms6AhImTQQ"
},
"bl_number": "BL-20250417-12999",
"bl_doc_type": "HouseBillOfLading",
"pol": {
"locationName": "YanTian",
"UNLocationCode": "CNYTN"
},
"pod": {
"locationName": "LA",
"UNLocationCode": "USLAX"
},
"shipper": "did:openebl:d2856f4e-e636-4cf0-9110-fbb45304e614",
"consignee": "did:openebl:0158341d-5c6b-4121-bfe4-535c7606bbd5",
"release_agent": "did:openebl:66c71465-3d0b-43d8-9e1b-c88c7a7634ca",
"draft": false,
"to_order": false,
"eta": "2025-05-01",
"endorsee": "",
"notify_parties": [],
"note": "Test from MCP",
"encrypt_content": false
},
"_meta": {
"progressToken": 11
}
}
}