
novaposhta
io.github.shopanaio/novaposhta
MCP Server for Nova Poshta API integration with AI assistants
Documentation
@shopana/carrier-api
Modern type-safe API clients for shipping carriers
Features β’ Packages β’ Quick Start β’ Documentation β’ Contributing
π Overview
A production-ready monorepo containing enterprise-grade TypeScript API clients for shipping carriers. Built with modern architecture patterns, each client features plugin-based design, full type safety, and transport-agnostic implementation.
π― Why Carrier API?
- β¨ Type-Safe: Complete TypeScript coverage with strict typing
- π Plugin Architecture: Use only what you need, tree-shake the rest
- π Universal: Works in Node.js, browsers, and edge runtimes
- π¨ Transport-Agnostic: Bring your own HTTP client
- π€ AI-Ready: MCP server for Claude and other AI assistants
- π¦ Zero Config: Sensible defaults, works out of the box
π¦ Packages
Carrier API Clients
@shopana/novaposhta-api-client
Nova Poshta API client with plugin architecture and complete type safety.
Features:
- π§ Plugin-based services (Address, Reference, Tracking, Waybill, Counterparty, ContactPerson)
- π Namespaced API:
client.address.*,client.reference.*,client.tracking.*,client.waybill.* - π― Full TypeScript support with strict typing
- π Transport-agnostic design
- π³ Tree-shakeable - only bundle what you use
- π Comprehensive documentation with examples
npm i @shopana/novaposhta-api-client @shopana/novaposhta-transport-fetch
AI Integration
@shopana/novaposhta-mcp-server
Model Context Protocol (MCP) server for integrating Nova Poshta with AI assistants like Claude.
Features:
- π€ Full MCP 1.22+ support
- π Comprehensive tracking and address search
- π Waybill creation and management
- π Reference data access
- π Dual transport (stdio + HTTP)
- π’ Production-ready with enterprise-grade error handling
npx @shopana/novaposhta-mcp-server
Transport Implementations
@shopana/novaposhta-transport-fetch
Fetch-based HTTP transport for Nova Poshta API client.
Features:
- π Cross-platform (Node.js, browsers, edge runtimes)
- βοΈ Configurable headers and fetch implementation
- π« AbortSignal support for request cancellation
- π¦ Minimal dependencies
- β‘ Lightweight and fast
npm i @shopana/novaposhta-transport-fetch
π Quick Start
Nova Poshta API Client
import { createClient, AddressService, ReferenceService, TrackingService } from '@shopana/novaposhta-api-client';
import { createFetchHttpTransport } from '@shopana/novaposhta-transport-fetch';
// Create client with plugins
const client = createClient({
transport: createFetchHttpTransport(),
baseUrl: 'https://api.novaposhta.ua/v2.0/json/',
apiKey: process.env.NOVA_POSHTA_API_KEY,
})
.use(new AddressService())
.use(new ReferenceService())
.use(new TrackingService());
// Use the namespaced API
const cities = await client.address.searchCities({ FindByString: 'ΠΠΈΡΠ²', Limit: 10 });
const cargoTypes = await client.reference.getCargoTypes();
const tracking = await client.tracking.trackDocument({ Documents: ['20450123456789'] });
console.log('Found cities:', cities.data.length);
console.log('Package status:', tracking.data[0].Status);
MCP Server for AI Assistants
Add to your .mcp.json or Claude Desktop config:
{
"mcpServers": {
"novaposhta": {
"command": "npx",
"args": ["-y", "-p", "@shopana/novaposhta-mcp-server", "novaposhta-mcp"],
"env": {
"NOVA_POSHTA_API_KEY": "your_api_key_here"
}
}
}
}
Then ask Claude:
- "Track Nova Poshta package 20450123456789"
- "Find warehouses in Kyiv with POS terminals"
- "Calculate shipping cost from Kyiv to Lviv for 5kg parcel"
ποΈ Architecture
All carrier clients in this monorepo follow a consistent, battle-tested design pattern:
βββββββββββββββββββββββββββββββββββββββββββ
β Your Application β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Plugin-based API Client β
β ββββββββββββ ββββββββββββ βββββββββββ β
β β Address β βReference β βTracking β β
β β Service β β Service β β Service β β
β ββββββββββββ ββββββββββββ βββββββββββ β
ββββββββββββββββ¬βββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Transport Layer (Injectable) β
β fetch / axios / custom β
βββββββββββββββββββββββββββββββββββββββββββ
Key Principles
- π Plugin-based: Connect only the services you need
- π― Type-safe: Complete TypeScript coverage with inference
- π¨ Transport-agnostic: Use fetch, axios, or custom HTTP client
- π³ Tree-shakeable: Optimal bundle size - only what you use
- π Namespaced API: Clean, organized method calls
- π§ͺ Testable: Mock transport layer for unit tests
π Documentation
Package Documentation
Additional Resources
π οΈ Development
Prerequisites
- Node.js 18+ or 20+
- Yarn 3+ (Yarn Workspaces)
Setup
# Clone the repository
git clone https://github.com/shopanaio/carrier-api.git
cd carrier-api
# Install dependencies
yarn install
# Build all packages
yarn build
Available Scripts
# Development
yarn dev # Watch mode for API client
yarn dev:mcp:stdio # Run MCP server in stdio mode
yarn dev:mcp:http # Run MCP server in HTTP mode
# Building
yarn build # Build API client
yarn build:mcp # Build MCP server
# Testing
yarn test # Run all tests
yarn test:watch # Run tests in watch mode
yarn test:coverage # Generate coverage report
yarn test:mcp # Run MCP server tests
# Code Quality
yarn lint # Lint TypeScript files
yarn lint:fix # Fix linting issues
yarn format # Format code with Prettier
yarn format:check # Check code formatting
yarn type-check # Run TypeScript type checking
Project Structure
carrier-api/
βββ packages/
β βββ novaposhta-api-client/ # Core API client
β β βββ src/
β β β βββ core/ # Client core logic
β β β βββ services/ # Service plugins
β β β βββ types/ # TypeScript types
β β β βββ index.ts
β β βββ package.json
β β
β βββ novaposhta-mcp-server/ # MCP server for AI
β β βββ src/
β β β βββ cli/ # CLI entry points
β β β βββ tools/ # MCP tools
β β β βββ server.ts # Server implementation
β β β βββ config.ts
β β βββ package.json
β β
β βββ novaposhta-transport-fetch/ # Fetch transport
β βββ src/
β βββ package.json
β
βββ e2e/ # End-to-end tests
βββ postman/ # Postman collections
βββ .mcp.json # MCP server config
βββ package.json # Root package.json
π€ Contributing
We welcome contributions from the community! Whether it's bug fixes, new features, documentation improvements, or examples - all contributions are appreciated.
How to Contribute
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes: Follow our coding standards
- Add tests: Ensure your changes are tested
- Run tests:
yarn test- make sure everything passes - Commit your changes:
git commit -m 'feat: add amazing feature' - Push to your fork:
git push origin feature/amazing-feature - Open a Pull Request
Development Guidelines
- Write clean, readable TypeScript code
- Follow the existing code style
- Add tests for new functionality
- Update documentation as needed
- Use conventional commits (feat, fix, docs, chore, etc.)
Reporting Issues
Found a bug or have a feature request? Please open an issue with:
- Clear description of the issue
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details (Node.js version, OS, etc.)
πΊοΈ Roadmap
Planned Features
- Additional carrier integrations
- GraphQL API layer
- React hooks package
- CLI tool for common operations
- Webhook handling utilities
- Rate limiting and retry strategies
- Caching layer with configurable adapters
Future Carriers
Eastern Europe:
- Ukrposhta
- Meest
- Justin
- Delivery
International:
- DHL
- FedEx
- UPS
- DPD
Want to help implement these? Contributions welcome!
π Status
| Package | Version | Build | Coverage | Downloads |
|---|---|---|---|---|
| @shopana/novaposhta-api-client | ||||
| @shopana/novaposhta-mcp-server | ||||
| @shopana/novaposhta-transport-fetch |
π License
Apache License 2.0 - see LICENSE for details.
This project is licensed under the Apache License 2.0, which means:
- β Commercial use allowed
- β Modification allowed
- β Distribution allowed
- β Patent use allowed
- β Private use allowed
π¬ Support & Community
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: support@shopana.io
- Website: shopana.io
π Acknowledgments
- Nova Poshta for their comprehensive API
- Model Context Protocol team at Anthropic
- All contributors who help improve this project
@shopana/novaposhta-mcp-servernpm install @shopana/novaposhta-mcp-server