parasut-node-sdk-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/deploy.yaml +51 -0
- package/.github/workflows/npm-publish.yml +71 -0
- package/.travis.yml +15 -0
- package/.yo-rc.json +11 -0
- package/LICENSE +21 -0
- package/README.md +187 -0
- package/gulpfile.js +50 -0
- package/package.json +42 -0
- package/packages/parasut-mcp-server/README.md +312 -0
- package/packages/parasut-mcp-server/dist/client.d.ts +24 -0
- package/packages/parasut-mcp-server/dist/client.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/client.js +46 -0
- package/packages/parasut-mcp-server/dist/client.js.map +1 -0
- package/packages/parasut-mcp-server/dist/config.d.ts +39 -0
- package/packages/parasut-mcp-server/dist/config.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/config.js +74 -0
- package/packages/parasut-mcp-server/dist/config.js.map +1 -0
- package/packages/parasut-mcp-server/dist/index.d.ts +21 -0
- package/packages/parasut-mcp-server/dist/index.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/index.js +26 -0
- package/packages/parasut-mcp-server/dist/index.js.map +1 -0
- package/packages/parasut-mcp-server/dist/server.d.ts +17 -0
- package/packages/parasut-mcp-server/dist/server.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/server.js +61 -0
- package/packages/parasut-mcp-server/dist/server.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/bills.d.ts +13 -0
- package/packages/parasut-mcp-server/dist/tools/bills.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/bills.js +387 -0
- package/packages/parasut-mcp-server/dist/tools/bills.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/contacts.d.ts +13 -0
- package/packages/parasut-mcp-server/dist/tools/contacts.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/contacts.js +522 -0
- package/packages/parasut-mcp-server/dist/tools/contacts.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/edocuments.d.ts +13 -0
- package/packages/parasut-mcp-server/dist/tools/edocuments.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/edocuments.js +514 -0
- package/packages/parasut-mcp-server/dist/tools/edocuments.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/financial.d.ts +13 -0
- package/packages/parasut-mcp-server/dist/tools/financial.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/financial.js +321 -0
- package/packages/parasut-mcp-server/dist/tools/financial.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/index.d.ts +19 -0
- package/packages/parasut-mcp-server/dist/tools/index.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/index.js +132 -0
- package/packages/parasut-mcp-server/dist/tools/index.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/inventory.d.ts +11 -0
- package/packages/parasut-mcp-server/dist/tools/inventory.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/inventory.js +143 -0
- package/packages/parasut-mcp-server/dist/tools/inventory.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/invoices.d.ts +16 -0
- package/packages/parasut-mcp-server/dist/tools/invoices.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/invoices.js +850 -0
- package/packages/parasut-mcp-server/dist/tools/invoices.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/organization.d.ts +14 -0
- package/packages/parasut-mcp-server/dist/tools/organization.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/organization.js +377 -0
- package/packages/parasut-mcp-server/dist/tools/organization.js.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/products.d.ts +13 -0
- package/packages/parasut-mcp-server/dist/tools/products.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/tools/products.js +299 -0
- package/packages/parasut-mcp-server/dist/tools/products.js.map +1 -0
- package/packages/parasut-mcp-server/dist/utils/errors.d.ts +34 -0
- package/packages/parasut-mcp-server/dist/utils/errors.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/utils/errors.js +217 -0
- package/packages/parasut-mcp-server/dist/utils/errors.js.map +1 -0
- package/packages/parasut-mcp-server/dist/utils/response.d.ts +94 -0
- package/packages/parasut-mcp-server/dist/utils/response.d.ts.map +1 -0
- package/packages/parasut-mcp-server/dist/utils/response.js +194 -0
- package/packages/parasut-mcp-server/dist/utils/response.js.map +1 -0
- package/packages/parasut-mcp-server/package-lock.json +2831 -0
- package/packages/parasut-mcp-server/package.json +70 -0
- package/packages/parasut-mcp-server/src/client.ts +55 -0
- package/packages/parasut-mcp-server/src/config.ts +99 -0
- package/packages/parasut-mcp-server/src/index.ts +27 -0
- package/packages/parasut-mcp-server/src/server.ts +79 -0
- package/packages/parasut-mcp-server/src/tools/bills.ts +416 -0
- package/packages/parasut-mcp-server/src/tools/contacts.ts +549 -0
- package/packages/parasut-mcp-server/src/tools/edocuments.ts +543 -0
- package/packages/parasut-mcp-server/src/tools/financial.ts +345 -0
- package/packages/parasut-mcp-server/src/tools/index.ts +158 -0
- package/packages/parasut-mcp-server/src/tools/inventory.ts +154 -0
- package/packages/parasut-mcp-server/src/tools/invoices.ts +905 -0
- package/packages/parasut-mcp-server/src/tools/organization.ts +405 -0
- package/packages/parasut-mcp-server/src/tools/products.ts +320 -0
- package/packages/parasut-mcp-server/src/utils/errors.ts +296 -0
- package/packages/parasut-mcp-server/src/utils/response.ts +280 -0
- package/packages/parasut-mcp-server/tsconfig.json +48 -0
- package/packages/parasut-node-sdk/README.md +393 -0
- package/packages/parasut-node-sdk/dist/client/HttpTransport.d.ts +92 -0
- package/packages/parasut-node-sdk/dist/client/HttpTransport.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/HttpTransport.js +237 -0
- package/packages/parasut-node-sdk/dist/client/HttpTransport.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/JsonApi.d.ts +122 -0
- package/packages/parasut-node-sdk/dist/client/JsonApi.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/JsonApi.js +192 -0
- package/packages/parasut-node-sdk/dist/client/JsonApi.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/OAuth.d.ts +117 -0
- package/packages/parasut-node-sdk/dist/client/OAuth.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/OAuth.js +322 -0
- package/packages/parasut-node-sdk/dist/client/OAuth.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/ParasutClient.d.ts +198 -0
- package/packages/parasut-node-sdk/dist/client/ParasutClient.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/ParasutClient.js +334 -0
- package/packages/parasut-node-sdk/dist/client/ParasutClient.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/QueryBuilder.d.ts +115 -0
- package/packages/parasut-node-sdk/dist/client/QueryBuilder.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/QueryBuilder.js +206 -0
- package/packages/parasut-node-sdk/dist/client/QueryBuilder.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/RateLimiter.d.ts +77 -0
- package/packages/parasut-node-sdk/dist/client/RateLimiter.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/RateLimiter.js +142 -0
- package/packages/parasut-node-sdk/dist/client/RateLimiter.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/RetryHandler.d.ts +88 -0
- package/packages/parasut-node-sdk/dist/client/RetryHandler.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/RetryHandler.js +125 -0
- package/packages/parasut-node-sdk/dist/client/RetryHandler.js.map +1 -0
- package/packages/parasut-node-sdk/dist/client/errors.d.ts +87 -0
- package/packages/parasut-node-sdk/dist/client/errors.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/client/errors.js +153 -0
- package/packages/parasut-node-sdk/dist/client/errors.js.map +1 -0
- package/packages/parasut-node-sdk/dist/generated/operations.d.ts +157 -0
- package/packages/parasut-node-sdk/dist/generated/operations.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/generated/operations.js +1285 -0
- package/packages/parasut-node-sdk/dist/generated/operations.js.map +1 -0
- package/packages/parasut-node-sdk/dist/generated/types.d.ts +1743 -0
- package/packages/parasut-node-sdk/dist/generated/types.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/generated/types.js +6 -0
- package/packages/parasut-node-sdk/dist/generated/types.js.map +1 -0
- package/packages/parasut-node-sdk/dist/index.d.ts +49 -0
- package/packages/parasut-node-sdk/dist/index.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/index.js +91 -0
- package/packages/parasut-node-sdk/dist/index.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/BaseResource.d.ts +143 -0
- package/packages/parasut-node-sdk/dist/resources/BaseResource.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/BaseResource.js +148 -0
- package/packages/parasut-node-sdk/dist/resources/BaseResource.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/accounts.d.ts +71 -0
- package/packages/parasut-node-sdk/dist/resources/accounts.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/accounts.js +43 -0
- package/packages/parasut-node-sdk/dist/resources/accounts.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/bankFees.d.ts +52 -0
- package/packages/parasut-node-sdk/dist/resources/bankFees.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/bankFees.js +25 -0
- package/packages/parasut-node-sdk/dist/resources/bankFees.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/contacts.d.ts +62 -0
- package/packages/parasut-node-sdk/dist/resources/contacts.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/contacts.js +43 -0
- package/packages/parasut-node-sdk/dist/resources/contacts.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eArchives.d.ts +125 -0
- package/packages/parasut-node-sdk/dist/resources/eArchives.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eArchives.js +100 -0
- package/packages/parasut-node-sdk/dist/resources/eArchives.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.d.ts +48 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.js +46 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoices.d.ts +104 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoices.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoices.js +72 -0
- package/packages/parasut-node-sdk/dist/resources/eInvoices.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eSmms.d.ts +73 -0
- package/packages/parasut-node-sdk/dist/resources/eSmms.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/eSmms.js +59 -0
- package/packages/parasut-node-sdk/dist/resources/eSmms.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/employees.d.ts +37 -0
- package/packages/parasut-node-sdk/dist/resources/employees.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/employees.js +31 -0
- package/packages/parasut-node-sdk/dist/resources/employees.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/index.d.ts +26 -0
- package/packages/parasut-node-sdk/dist/resources/index.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/index.js +35 -0
- package/packages/parasut-node-sdk/dist/resources/index.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/inventoryLevels.d.ts +25 -0
- package/packages/parasut-node-sdk/dist/resources/inventoryLevels.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/inventoryLevels.js +22 -0
- package/packages/parasut-node-sdk/dist/resources/inventoryLevels.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/itemCategories.d.ts +31 -0
- package/packages/parasut-node-sdk/dist/resources/itemCategories.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/itemCategories.js +22 -0
- package/packages/parasut-node-sdk/dist/resources/itemCategories.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/products.d.ts +50 -0
- package/packages/parasut-node-sdk/dist/resources/products.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/products.js +31 -0
- package/packages/parasut-node-sdk/dist/resources/products.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/purchaseBills.d.ts +105 -0
- package/packages/parasut-node-sdk/dist/resources/purchaseBills.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/purchaseBills.js +67 -0
- package/packages/parasut-node-sdk/dist/resources/purchaseBills.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salaries.d.ts +50 -0
- package/packages/parasut-node-sdk/dist/resources/salaries.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salaries.js +25 -0
- package/packages/parasut-node-sdk/dist/resources/salaries.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salesInvoices.d.ts +137 -0
- package/packages/parasut-node-sdk/dist/resources/salesInvoices.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salesInvoices.js +84 -0
- package/packages/parasut-node-sdk/dist/resources/salesInvoices.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salesOffers.d.ts +72 -0
- package/packages/parasut-node-sdk/dist/resources/salesOffers.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/salesOffers.js +66 -0
- package/packages/parasut-node-sdk/dist/resources/salesOffers.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.d.ts +26 -0
- package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.js +16 -0
- package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/stockMovements.d.ts +27 -0
- package/packages/parasut-node-sdk/dist/resources/stockMovements.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/stockMovements.js +16 -0
- package/packages/parasut-node-sdk/dist/resources/stockMovements.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/tags.d.ts +22 -0
- package/packages/parasut-node-sdk/dist/resources/tags.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/tags.js +16 -0
- package/packages/parasut-node-sdk/dist/resources/tags.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/taxes.d.ts +50 -0
- package/packages/parasut-node-sdk/dist/resources/taxes.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/taxes.js +25 -0
- package/packages/parasut-node-sdk/dist/resources/taxes.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/trackableJobs.d.ts +72 -0
- package/packages/parasut-node-sdk/dist/resources/trackableJobs.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/trackableJobs.js +108 -0
- package/packages/parasut-node-sdk/dist/resources/trackableJobs.js.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/transactions.d.ts +26 -0
- package/packages/parasut-node-sdk/dist/resources/transactions.d.ts.map +1 -0
- package/packages/parasut-node-sdk/dist/resources/transactions.js +16 -0
- package/packages/parasut-node-sdk/dist/resources/transactions.js.map +1 -0
- package/packages/parasut-node-sdk/package-lock.json +4030 -0
- package/packages/parasut-node-sdk/package.json +71 -0
- package/packages/parasut-node-sdk/scripts/generate-types.ts +495 -0
- package/packages/parasut-node-sdk/src/client/HttpTransport.ts +334 -0
- package/packages/parasut-node-sdk/src/client/JsonApi.ts +314 -0
- package/packages/parasut-node-sdk/src/client/OAuth.ts +446 -0
- package/packages/parasut-node-sdk/src/client/ParasutClient.ts +423 -0
- package/packages/parasut-node-sdk/src/client/QueryBuilder.ts +292 -0
- package/packages/parasut-node-sdk/src/client/RateLimiter.ts +190 -0
- package/packages/parasut-node-sdk/src/client/RetryHandler.ts +216 -0
- package/packages/parasut-node-sdk/src/client/errors.ts +209 -0
- package/packages/parasut-node-sdk/src/generated/operations.ts +1454 -0
- package/packages/parasut-node-sdk/src/generated/types.ts +1856 -0
- package/packages/parasut-node-sdk/src/index.ts +235 -0
- package/packages/parasut-node-sdk/src/resources/BaseResource.ts +275 -0
- package/packages/parasut-node-sdk/src/resources/accounts.ts +108 -0
- package/packages/parasut-node-sdk/src/resources/bankFees.ts +74 -0
- package/packages/parasut-node-sdk/src/resources/contacts.ts +96 -0
- package/packages/parasut-node-sdk/src/resources/eArchives.ts +202 -0
- package/packages/parasut-node-sdk/src/resources/eInvoiceInboxes.ts +78 -0
- package/packages/parasut-node-sdk/src/resources/eInvoices.ts +166 -0
- package/packages/parasut-node-sdk/src/resources/eSmms.ts +132 -0
- package/packages/parasut-node-sdk/src/resources/employees.ts +69 -0
- package/packages/parasut-node-sdk/src/resources/index.ts +44 -0
- package/packages/parasut-node-sdk/src/resources/inventoryLevels.ts +45 -0
- package/packages/parasut-node-sdk/src/resources/itemCategories.ts +49 -0
- package/packages/parasut-node-sdk/src/resources/products.ts +78 -0
- package/packages/parasut-node-sdk/src/resources/purchaseBills.ts +162 -0
- package/packages/parasut-node-sdk/src/resources/salaries.ts +72 -0
- package/packages/parasut-node-sdk/src/resources/salesInvoices.ts +194 -0
- package/packages/parasut-node-sdk/src/resources/salesOffers.ts +149 -0
- package/packages/parasut-node-sdk/src/resources/shipmentDocuments.ts +40 -0
- package/packages/parasut-node-sdk/src/resources/stockMovements.ts +41 -0
- package/packages/parasut-node-sdk/src/resources/tags.ts +32 -0
- package/packages/parasut-node-sdk/src/resources/taxes.ts +68 -0
- package/packages/parasut-node-sdk/src/resources/trackableJobs.ts +167 -0
- package/packages/parasut-node-sdk/src/resources/transactions.ts +40 -0
- package/packages/parasut-node-sdk/tsconfig.json +47 -0
- package/scripts/build.js +14 -0
- package/scripts/deploy-branch.js +16 -0
- package/spec/README.md +24 -0
- package/spec/code_samples/README.md +9 -0
- package/spec/swagger.yaml +19616 -0
- package/web/CNAME +1 -0
- package/web/custom.css +34 -0
- package/web/favicon.ico +0 -0
- package/web/favicon.png +0 -0
- package/web/index.html +26 -0
- package/web/logo.png +0 -0
- package/web/v4.html +3 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# @yigitkonur/parasut-mcp-server
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@yigitkonur/parasut-mcp-server)
|
|
4
|
+
[](https://www.typescriptlang.org/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
> **UNOFFICIAL** MCP (Model Context Protocol) Server for the [Paraşüt](https://www.parasut.com/) API.
|
|
8
|
+
>
|
|
9
|
+
> **Not affiliated with Paraşüt.** This is a community-maintained project.
|
|
10
|
+
|
|
11
|
+
Use Claude AI to manage your Turkish accounting - invoices, contacts, products, e-fatura, and financial operations through natural conversation.
|
|
12
|
+
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- **34 AI-Optimized Tools** - Intent-first design, not 1:1 API mapping
|
|
16
|
+
- **Confirmation Patterns** - Preview mode before executing financial operations
|
|
17
|
+
- **Double Confirmation** - Extra safety for irreversible e-invoice submissions to GİB
|
|
18
|
+
- **Smart Responses** - Every response includes next-step guidance
|
|
19
|
+
- **Error Recovery** - Helpful error messages with fix instructions
|
|
20
|
+
- **Turkish E-Invoicing** - Full support for e-Fatura, e-Arşiv, e-SMM
|
|
21
|
+
|
|
22
|
+
## Installation
|
|
23
|
+
|
|
24
|
+
### Global Install (Recommended)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install -g @yigitkonur/parasut-mcp-server
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Or use with npx
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx @yigitkonur/parasut-mcp-server
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Configuration
|
|
37
|
+
|
|
38
|
+
### Environment Variables
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Required
|
|
42
|
+
PARASUT_COMPANY_ID=123456
|
|
43
|
+
PARASUT_CLIENT_ID=your-client-id
|
|
44
|
+
PARASUT_CLIENT_SECRET=your-client-secret
|
|
45
|
+
PARASUT_USERNAME=your-username
|
|
46
|
+
PARASUT_PASSWORD=your-password
|
|
47
|
+
|
|
48
|
+
# Optional
|
|
49
|
+
PARASUT_BASE_URL=https://api.parasut.com/v4
|
|
50
|
+
DEBUG=true
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Claude Desktop
|
|
54
|
+
|
|
55
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"mcpServers": {
|
|
60
|
+
"parasut": {
|
|
61
|
+
"command": "parasut-mcp",
|
|
62
|
+
"env": {
|
|
63
|
+
"PARASUT_COMPANY_ID": "123456",
|
|
64
|
+
"PARASUT_CLIENT_ID": "your-client-id",
|
|
65
|
+
"PARASUT_CLIENT_SECRET": "your-client-secret",
|
|
66
|
+
"PARASUT_USERNAME": "your-username",
|
|
67
|
+
"PARASUT_PASSWORD": "your-password"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Claude Code
|
|
75
|
+
|
|
76
|
+
Add to your MCP settings:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"mcpServers": {
|
|
81
|
+
"parasut": {
|
|
82
|
+
"command": "npx",
|
|
83
|
+
"args": ["@yigitkonur/parasut-mcp-server"],
|
|
84
|
+
"env": {
|
|
85
|
+
"PARASUT_COMPANY_ID": "123456",
|
|
86
|
+
"PARASUT_CLIENT_ID": "your-client-id",
|
|
87
|
+
"PARASUT_CLIENT_SECRET": "your-client-secret",
|
|
88
|
+
"PARASUT_USERNAME": "your-username",
|
|
89
|
+
"PARASUT_PASSWORD": "your-password"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Available Tools (34 total)
|
|
97
|
+
|
|
98
|
+
### Contacts (4 tools)
|
|
99
|
+
|
|
100
|
+
| Tool | Description |
|
|
101
|
+
|------|-------------|
|
|
102
|
+
| `search_contacts` | Search customers/suppliers by name, email, or tax number |
|
|
103
|
+
| `get_contact` | Get detailed contact information with balance |
|
|
104
|
+
| `create_contact` | Create a new customer or supplier |
|
|
105
|
+
| `update_contact` | Update contact information |
|
|
106
|
+
|
|
107
|
+
### Sales Invoices (7 tools)
|
|
108
|
+
|
|
109
|
+
| Tool | Description |
|
|
110
|
+
|------|-------------|
|
|
111
|
+
| `search_invoices` | Search invoices by customer, date, or status |
|
|
112
|
+
| `get_invoice` | Get invoice details with line items and payments |
|
|
113
|
+
| `create_invoice` | Create a new sales invoice (requires confirmation) |
|
|
114
|
+
| `cancel_invoice` | Cancel an invoice (requires confirmation) |
|
|
115
|
+
| `recover_invoice` | Recover a cancelled invoice |
|
|
116
|
+
| `invoice_pdf` | Generate PDF for an invoice |
|
|
117
|
+
| `record_invoice_payment` | Record payment received (requires confirmation) |
|
|
118
|
+
|
|
119
|
+
### Purchase Bills (4 tools)
|
|
120
|
+
|
|
121
|
+
| Tool | Description |
|
|
122
|
+
|------|-------------|
|
|
123
|
+
| `search_bills` | Search purchase bills/expenses |
|
|
124
|
+
| `get_bill` | Get bill details |
|
|
125
|
+
| `create_bill` | Create a new purchase bill (requires confirmation) |
|
|
126
|
+
| `record_bill_payment` | Record payment to supplier (requires confirmation) |
|
|
127
|
+
|
|
128
|
+
### Products (4 tools)
|
|
129
|
+
|
|
130
|
+
| Tool | Description |
|
|
131
|
+
|------|-------------|
|
|
132
|
+
| `search_products` | Search products and services |
|
|
133
|
+
| `get_product` | Get product details with inventory |
|
|
134
|
+
| `create_product` | Create a new product |
|
|
135
|
+
| `update_product` | Update product information |
|
|
136
|
+
|
|
137
|
+
### E-Documents (4 tools)
|
|
138
|
+
|
|
139
|
+
| Tool | Description |
|
|
140
|
+
|------|-------------|
|
|
141
|
+
| `check_einvoice_inbox` | Check if contact is e-invoice registered |
|
|
142
|
+
| `send_einvoice` | Send invoice as e-Fatura (DOUBLE confirmation - irreversible!) |
|
|
143
|
+
| `send_earchive` | Send invoice as e-Arşiv (DOUBLE confirmation - irreversible!) |
|
|
144
|
+
| `send_esmm` | Send invoice as e-SMM (DOUBLE confirmation - irreversible!) |
|
|
145
|
+
|
|
146
|
+
### Financial (4 tools)
|
|
147
|
+
|
|
148
|
+
| Tool | Description |
|
|
149
|
+
|------|-------------|
|
|
150
|
+
| `list_accounts` | List bank/cash accounts with balances |
|
|
151
|
+
| `search_transactions` | Search financial transactions |
|
|
152
|
+
| `create_bank_fee` | Record a bank fee (requires confirmation) |
|
|
153
|
+
| `get_financial_summary` | Get receivables/payables overview |
|
|
154
|
+
|
|
155
|
+
### Inventory (2 tools)
|
|
156
|
+
|
|
157
|
+
| Tool | Description |
|
|
158
|
+
|------|-------------|
|
|
159
|
+
| `get_stock_levels` | Get current inventory levels |
|
|
160
|
+
| `search_stock_movements` | Search stock movement history |
|
|
161
|
+
|
|
162
|
+
### Organization (5 tools)
|
|
163
|
+
|
|
164
|
+
| Tool | Description |
|
|
165
|
+
|------|-------------|
|
|
166
|
+
| `list_categories` | List item categories |
|
|
167
|
+
| `list_tags` | List tags for organization |
|
|
168
|
+
| `list_employees` | List employees |
|
|
169
|
+
| `create_salary` | Record salary payment (requires confirmation) |
|
|
170
|
+
| `create_tax` | Record tax payment (requires confirmation) |
|
|
171
|
+
|
|
172
|
+
## Safety Features
|
|
173
|
+
|
|
174
|
+
### Confirmation Pattern
|
|
175
|
+
|
|
176
|
+
Financial operations require explicit confirmation:
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
User: Create an invoice for 5000 TL to Acme Corp
|
|
180
|
+
|
|
181
|
+
Claude: I'll create this invoice. Here's the preview:
|
|
182
|
+
- Customer: Acme Corp
|
|
183
|
+
- Amount: 5000 TL
|
|
184
|
+
- Net: 5000 TL, VAT: 1000 TL, Total: 6000 TL
|
|
185
|
+
|
|
186
|
+
⚠️ Call again with confirm=true to proceed.
|
|
187
|
+
|
|
188
|
+
User: Yes, confirm it
|
|
189
|
+
|
|
190
|
+
Claude: [Executes with confirm=true]
|
|
191
|
+
✅ Invoice #INV-2024-001 created successfully.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Double Confirmation for E-Documents
|
|
195
|
+
|
|
196
|
+
E-invoices submitted to GİB (Turkish Tax Authority) are **irreversible**:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
User: Send invoice #123 as e-fatura
|
|
200
|
+
|
|
201
|
+
Claude: ⚠️🚨 IRREVERSIBLE OPERATION 🚨⚠️
|
|
202
|
+
|
|
203
|
+
This will submit to GİB (Tax Authority) and CANNOT be undone!
|
|
204
|
+
|
|
205
|
+
To proceed, you must:
|
|
206
|
+
1. Set confirm=true
|
|
207
|
+
2. Set i_understand_this_is_irreversible="YES"
|
|
208
|
+
|
|
209
|
+
User: I understand, proceed with both confirmations
|
|
210
|
+
|
|
211
|
+
Claude: [Executes with both confirmations]
|
|
212
|
+
✅ E-invoice submitted to GİB successfully.
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Example Conversations
|
|
216
|
+
|
|
217
|
+
### Create and Send Invoice
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
User: Create an invoice for 10,000 TL consulting services to ABC Company,
|
|
221
|
+
then send it as e-fatura
|
|
222
|
+
|
|
223
|
+
Claude: I'll help you with that. Let me:
|
|
224
|
+
1. Search for ABC Company
|
|
225
|
+
2. Create the invoice
|
|
226
|
+
3. Check if they're e-invoice registered
|
|
227
|
+
4. Send as e-fatura
|
|
228
|
+
|
|
229
|
+
[Executes step by step with confirmations]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Financial Overview
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
User: What's our current financial position?
|
|
236
|
+
|
|
237
|
+
Claude: [Uses get_financial_summary]
|
|
238
|
+
|
|
239
|
+
Financial Summary:
|
|
240
|
+
- Receivables: 125,000 TL (15 open invoices)
|
|
241
|
+
- Payables: 45,000 TL (8 open bills)
|
|
242
|
+
- Net Position: +80,000 TL
|
|
243
|
+
|
|
244
|
+
Bank Accounts:
|
|
245
|
+
- İş Bankası: 50,000 TL
|
|
246
|
+
- Garanti: 32,000 TL
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Record Payments
|
|
250
|
+
|
|
251
|
+
```
|
|
252
|
+
User: Record that ABC Company paid 5000 TL for invoice #456
|
|
253
|
+
|
|
254
|
+
Claude: [Uses record_invoice_payment with preview]
|
|
255
|
+
|
|
256
|
+
Preview:
|
|
257
|
+
- Invoice: #456
|
|
258
|
+
- Customer: ABC Company
|
|
259
|
+
- Current remaining: 10,000 TL
|
|
260
|
+
- Payment: 5,000 TL
|
|
261
|
+
- New remaining: 5,000 TL
|
|
262
|
+
|
|
263
|
+
⚠️ Confirm to proceed...
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Design Philosophy
|
|
267
|
+
|
|
268
|
+
1. **Task-Shaped Tools** - Tools designed around user tasks, not API endpoints
|
|
269
|
+
2. **Under 40 Tools** - Well under the cognitive limit for AI tool selection
|
|
270
|
+
3. **Guided Responses** - Every response includes relevant next steps
|
|
271
|
+
4. **Error Recovery** - Errors explain what went wrong and how to fix it
|
|
272
|
+
5. **Safety First** - Confirmation patterns prevent accidental financial changes
|
|
273
|
+
|
|
274
|
+
## Development
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Clone the repository
|
|
278
|
+
git clone https://github.com/yigitkonur/parasut-node-sdk-mcp.git
|
|
279
|
+
cd parasut-node-sdk-mcp
|
|
280
|
+
|
|
281
|
+
# Install dependencies
|
|
282
|
+
npm install
|
|
283
|
+
|
|
284
|
+
# Build
|
|
285
|
+
npm run build:mcp
|
|
286
|
+
|
|
287
|
+
# Run locally
|
|
288
|
+
npm run start --workspace=@yigitkonur/parasut-mcp-server
|
|
289
|
+
|
|
290
|
+
# Type check
|
|
291
|
+
npm run typecheck
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Disclaimer
|
|
295
|
+
|
|
296
|
+
**This is an UNOFFICIAL project.**
|
|
297
|
+
|
|
298
|
+
- Not affiliated with, endorsed by, or connected to Paraşüt
|
|
299
|
+
- Paraşüt is a trademark of Paraşüt Bilgi Teknolojileri A.Ş.
|
|
300
|
+
- Use at your own risk
|
|
301
|
+
- E-documents submitted to GİB are legally binding and irreversible
|
|
302
|
+
|
|
303
|
+
## License
|
|
304
|
+
|
|
305
|
+
MIT © [Yigit Konur](https://github.com/yigitkonur)
|
|
306
|
+
|
|
307
|
+
## Links
|
|
308
|
+
|
|
309
|
+
- [GitHub Repository](https://github.com/yigitkonur/parasut-node-sdk-mcp)
|
|
310
|
+
- [SDK Package](https://www.npmjs.com/package/@yigitkonur/parasut-node-sdk)
|
|
311
|
+
- [Paraşüt API Documentation](https://apidocs.parasut.com/)
|
|
312
|
+
- [MCP Protocol](https://modelcontextprotocol.io/)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paraşüt SDK Client
|
|
3
|
+
*
|
|
4
|
+
* Singleton client for the Paraşüt API.
|
|
5
|
+
* Initialized once at server startup and reused for all tool calls.
|
|
6
|
+
*/
|
|
7
|
+
import { ParasutClient } from '@yigitkonur/parasut-node-sdk';
|
|
8
|
+
import type { ParasutConfig } from './config.js';
|
|
9
|
+
/**
|
|
10
|
+
* Initializes the Paraşüt client singleton.
|
|
11
|
+
* Must be called once at server startup with valid configuration.
|
|
12
|
+
*/
|
|
13
|
+
export declare function initializeClient(config: ParasutConfig): ParasutClient;
|
|
14
|
+
/**
|
|
15
|
+
* Gets the Paraşüt client singleton.
|
|
16
|
+
* Throws if client has not been initialized.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getClient(): ParasutClient;
|
|
19
|
+
/**
|
|
20
|
+
* Resets the client singleton.
|
|
21
|
+
* Primarily used for testing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resetClient(): void;
|
|
24
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAiBrE;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAOzC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paraşüt SDK Client
|
|
3
|
+
*
|
|
4
|
+
* Singleton client for the Paraşüt API.
|
|
5
|
+
* Initialized once at server startup and reused for all tool calls.
|
|
6
|
+
*/
|
|
7
|
+
import { ParasutClient } from '@yigitkonur/parasut-node-sdk';
|
|
8
|
+
let client = null;
|
|
9
|
+
/**
|
|
10
|
+
* Initializes the Paraşüt client singleton.
|
|
11
|
+
* Must be called once at server startup with valid configuration.
|
|
12
|
+
*/
|
|
13
|
+
export function initializeClient(config) {
|
|
14
|
+
if (client) {
|
|
15
|
+
return client;
|
|
16
|
+
}
|
|
17
|
+
client = new ParasutClient({
|
|
18
|
+
companyId: config.companyId,
|
|
19
|
+
credentials: {
|
|
20
|
+
clientId: config.clientId,
|
|
21
|
+
clientSecret: config.clientSecret,
|
|
22
|
+
username: config.username,
|
|
23
|
+
password: config.password,
|
|
24
|
+
},
|
|
25
|
+
...(config.baseUrl !== undefined && { baseUrl: config.baseUrl }),
|
|
26
|
+
});
|
|
27
|
+
return client;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the Paraşüt client singleton.
|
|
31
|
+
* Throws if client has not been initialized.
|
|
32
|
+
*/
|
|
33
|
+
export function getClient() {
|
|
34
|
+
if (!client) {
|
|
35
|
+
throw new Error('Paraşüt client not initialized. Call initializeClient() first.');
|
|
36
|
+
}
|
|
37
|
+
return client;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Resets the client singleton.
|
|
41
|
+
* Primarily used for testing.
|
|
42
|
+
*/
|
|
43
|
+
export function resetClient() {
|
|
44
|
+
client = null;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,IAAI,MAAM,GAAyB,IAAI,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,IAAI,aAAa,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE;YACX,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B;QACD,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;KACjE,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration
|
|
3
|
+
*
|
|
4
|
+
* Loads configuration from environment variables.
|
|
5
|
+
* All Paraşüt credentials must be provided via environment.
|
|
6
|
+
*/
|
|
7
|
+
export interface ParasutConfig {
|
|
8
|
+
companyId: number;
|
|
9
|
+
clientId: string;
|
|
10
|
+
clientSecret: string;
|
|
11
|
+
username: string;
|
|
12
|
+
password: string;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ServerConfig {
|
|
16
|
+
parasut: ParasutConfig;
|
|
17
|
+
debug: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Loads configuration from environment variables.
|
|
21
|
+
*
|
|
22
|
+
* Required environment variables:
|
|
23
|
+
* - PARASUT_COMPANY_ID: Your Paraşüt company ID (firma ID)
|
|
24
|
+
* - PARASUT_CLIENT_ID: OAuth client ID
|
|
25
|
+
* - PARASUT_CLIENT_SECRET: OAuth client secret
|
|
26
|
+
* - PARASUT_USERNAME: Your Paraşüt username (email)
|
|
27
|
+
* - PARASUT_PASSWORD: Your Paraşüt password
|
|
28
|
+
*
|
|
29
|
+
* Optional:
|
|
30
|
+
* - PARASUT_BASE_URL: API base URL (default: https://api.parasut.com/v4)
|
|
31
|
+
* - DEBUG: Enable debug logging (default: false)
|
|
32
|
+
*/
|
|
33
|
+
export declare function loadConfig(): ServerConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Validates that all required configuration is present.
|
|
36
|
+
* Call this early to fail fast on missing config.
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateConfig(config: ServerConfig): void;
|
|
39
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAwBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAazC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAsBzD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration
|
|
3
|
+
*
|
|
4
|
+
* Loads configuration from environment variables.
|
|
5
|
+
* All Paraşüt credentials must be provided via environment.
|
|
6
|
+
*/
|
|
7
|
+
function getEnv(name, required = false) {
|
|
8
|
+
const value = process.env[name];
|
|
9
|
+
if (required && !value) {
|
|
10
|
+
throw new Error(`Missing required environment variable: ${name}`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function getEnvInt(name, required = false) {
|
|
15
|
+
const value = getEnv(name, required);
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return undefined;
|
|
18
|
+
const parsed = parseInt(value, 10);
|
|
19
|
+
if (isNaN(parsed)) {
|
|
20
|
+
throw new Error(`Environment variable ${name} must be a valid integer`);
|
|
21
|
+
}
|
|
22
|
+
return parsed;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Loads configuration from environment variables.
|
|
26
|
+
*
|
|
27
|
+
* Required environment variables:
|
|
28
|
+
* - PARASUT_COMPANY_ID: Your Paraşüt company ID (firma ID)
|
|
29
|
+
* - PARASUT_CLIENT_ID: OAuth client ID
|
|
30
|
+
* - PARASUT_CLIENT_SECRET: OAuth client secret
|
|
31
|
+
* - PARASUT_USERNAME: Your Paraşüt username (email)
|
|
32
|
+
* - PARASUT_PASSWORD: Your Paraşüt password
|
|
33
|
+
*
|
|
34
|
+
* Optional:
|
|
35
|
+
* - PARASUT_BASE_URL: API base URL (default: https://api.parasut.com/v4)
|
|
36
|
+
* - DEBUG: Enable debug logging (default: false)
|
|
37
|
+
*/
|
|
38
|
+
export function loadConfig() {
|
|
39
|
+
const baseUrl = getEnv('PARASUT_BASE_URL');
|
|
40
|
+
return {
|
|
41
|
+
parasut: {
|
|
42
|
+
companyId: getEnvInt('PARASUT_COMPANY_ID', true),
|
|
43
|
+
clientId: getEnv('PARASUT_CLIENT_ID', true),
|
|
44
|
+
clientSecret: getEnv('PARASUT_CLIENT_SECRET', true),
|
|
45
|
+
username: getEnv('PARASUT_USERNAME', true),
|
|
46
|
+
password: getEnv('PARASUT_PASSWORD', true),
|
|
47
|
+
...(baseUrl !== undefined && { baseUrl }),
|
|
48
|
+
},
|
|
49
|
+
debug: getEnv('DEBUG') === 'true',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validates that all required configuration is present.
|
|
54
|
+
* Call this early to fail fast on missing config.
|
|
55
|
+
*/
|
|
56
|
+
export function validateConfig(config) {
|
|
57
|
+
const { parasut } = config;
|
|
58
|
+
if (parasut.companyId <= 0) {
|
|
59
|
+
throw new Error('PARASUT_COMPANY_ID must be a positive integer');
|
|
60
|
+
}
|
|
61
|
+
if (!parasut.clientId.trim()) {
|
|
62
|
+
throw new Error('PARASUT_CLIENT_ID cannot be empty');
|
|
63
|
+
}
|
|
64
|
+
if (!parasut.clientSecret.trim()) {
|
|
65
|
+
throw new Error('PARASUT_CLIENT_SECRET cannot be empty');
|
|
66
|
+
}
|
|
67
|
+
if (!parasut.username.trim()) {
|
|
68
|
+
throw new Error('PARASUT_USERNAME cannot be empty');
|
|
69
|
+
}
|
|
70
|
+
if (!parasut.password.trim()) {
|
|
71
|
+
throw new Error('PARASUT_PASSWORD cannot be empty');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,SAAS,MAAM,CAAC,IAAY,EAAE,QAAQ,GAAG,KAAK;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAID,SAAS,SAAS,CAAC,IAAY,EAAE,QAAQ,GAAG,KAAK;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,QAAgB,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,0BAA0B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3C,OAAO;QACL,OAAO,EAAE;YACP,SAAS,EAAE,SAAS,CAAC,oBAAoB,EAAE,IAAI,CAAC;YAChD,QAAQ,EAAE,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC;YAC3C,YAAY,EAAE,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC;YACnD,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;YAC1C,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;YAC1C,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;SAC1C;QACD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM;KAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAE3B,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Paraşüt MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server for Paraşüt API.
|
|
6
|
+
* Provides AI-friendly tools for Turkish accounting and invoicing.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx @parasut/mcp-server
|
|
10
|
+
*
|
|
11
|
+
* Environment Variables:
|
|
12
|
+
* PARASUT_COMPANY_ID - Your company ID (required)
|
|
13
|
+
* PARASUT_CLIENT_ID - OAuth client ID (required)
|
|
14
|
+
* PARASUT_CLIENT_SECRET - OAuth client secret (required)
|
|
15
|
+
* PARASUT_USERNAME - Your username (required)
|
|
16
|
+
* PARASUT_PASSWORD - Your password (required)
|
|
17
|
+
* PARASUT_BASE_URL - API base URL (optional)
|
|
18
|
+
* DEBUG - Enable debug logging (optional)
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Paraşüt MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server for Paraşüt API.
|
|
6
|
+
* Provides AI-friendly tools for Turkish accounting and invoicing.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* npx @parasut/mcp-server
|
|
10
|
+
*
|
|
11
|
+
* Environment Variables:
|
|
12
|
+
* PARASUT_COMPANY_ID - Your company ID (required)
|
|
13
|
+
* PARASUT_CLIENT_ID - OAuth client ID (required)
|
|
14
|
+
* PARASUT_CLIENT_SECRET - OAuth client secret (required)
|
|
15
|
+
* PARASUT_USERNAME - Your username (required)
|
|
16
|
+
* PARASUT_PASSWORD - Your password (required)
|
|
17
|
+
* PARASUT_BASE_URL - API base URL (optional)
|
|
18
|
+
* DEBUG - Enable debug logging (optional)
|
|
19
|
+
*/
|
|
20
|
+
import { startServer } from './server.js';
|
|
21
|
+
// Start the server
|
|
22
|
+
startServer().catch((error) => {
|
|
23
|
+
console.error('Failed to start Paraşüt MCP server:', error);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,mBAAmB;AACnB,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paraşüt MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server for Paraşüt API.
|
|
5
|
+
* Provides tools for Turkish accounting and invoicing operations.
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import { type ServerConfig } from './config.js';
|
|
9
|
+
/**
|
|
10
|
+
* Creates and configures the MCP server.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createServer(config: ServerConfig): Server;
|
|
13
|
+
/**
|
|
14
|
+
* Starts the MCP server with stdio transport.
|
|
15
|
+
*/
|
|
16
|
+
export declare function startServer(): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ5E;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA8BzD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBjD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Paraşüt MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Model Context Protocol server for Paraşüt API.
|
|
5
|
+
* Provides tools for Turkish accounting and invoicing operations.
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
9
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
10
|
+
import { loadConfig, validateConfig } from './config.js';
|
|
11
|
+
import { initializeClient } from './client.js';
|
|
12
|
+
import { getAllTools, handleToolCall } from './tools/index.js';
|
|
13
|
+
// Server metadata
|
|
14
|
+
const SERVER_NAME = 'parasut-mcp-server';
|
|
15
|
+
const SERVER_VERSION = '1.0.0';
|
|
16
|
+
/**
|
|
17
|
+
* Creates and configures the MCP server.
|
|
18
|
+
*/
|
|
19
|
+
export function createServer(config) {
|
|
20
|
+
// Initialize SDK client
|
|
21
|
+
initializeClient(config.parasut);
|
|
22
|
+
// Create MCP server
|
|
23
|
+
const server = new Server({
|
|
24
|
+
name: SERVER_NAME,
|
|
25
|
+
version: SERVER_VERSION,
|
|
26
|
+
}, {
|
|
27
|
+
capabilities: {
|
|
28
|
+
tools: {},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// Handle tool listing
|
|
32
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
33
|
+
const tools = getAllTools();
|
|
34
|
+
return { tools };
|
|
35
|
+
});
|
|
36
|
+
// Handle tool calls
|
|
37
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
38
|
+
const { name, arguments: args } = request.params;
|
|
39
|
+
return handleToolCall(name, args ?? {});
|
|
40
|
+
});
|
|
41
|
+
return server;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Starts the MCP server with stdio transport.
|
|
45
|
+
*/
|
|
46
|
+
export async function startServer() {
|
|
47
|
+
// Load and validate configuration
|
|
48
|
+
const config = loadConfig();
|
|
49
|
+
validateConfig(config);
|
|
50
|
+
// Create server
|
|
51
|
+
const server = createServer(config);
|
|
52
|
+
// Connect to stdio transport
|
|
53
|
+
const transport = new StdioServerTransport();
|
|
54
|
+
await server.connect(transport);
|
|
55
|
+
// Log to stderr (stdout is reserved for MCP protocol)
|
|
56
|
+
if (config.debug) {
|
|
57
|
+
console.error(`${SERVER_NAME} v${SERVER_VERSION} started`);
|
|
58
|
+
console.error(`Company ID: ${config.parasut.companyId}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/D,kBAAkB;AAClB,MAAM,WAAW,GAAG,oBAAoB,CAAC;AACzC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,wBAAwB;IACxB,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEjC,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAW,WAAW,EAAE,CAAC;QACpC,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,oBAAoB;IACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,kCAAkC;IAClC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,gBAAgB;IAChB,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAEpC,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,sDAAsD;IACtD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,KAAK,cAAc,UAAU,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Purchase Bill Tools
|
|
3
|
+
*
|
|
4
|
+
* Tools for managing expenses and purchase bills.
|
|
5
|
+
*/
|
|
6
|
+
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { type ToolResponse } from '../utils/response.js';
|
|
8
|
+
export declare const billTools: Tool[];
|
|
9
|
+
export declare function handleSearchBills(args: unknown): Promise<ToolResponse>;
|
|
10
|
+
export declare function handleGetBill(args: unknown): Promise<ToolResponse>;
|
|
11
|
+
export declare function handleCreateBill(args: unknown): Promise<ToolResponse>;
|
|
12
|
+
export declare function handleRecordBillPayment(args: unknown): Promise<ToolResponse>;
|
|
13
|
+
//# sourceMappingURL=bills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bills.d.ts","sourceRoot":"","sources":["../../src/tools/bills.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAiD9B,eAAO,MAAM,SAAS,EAAE,IAAI,EAsJ3B,CAAC;AAMF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA2B5E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BxE;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA4E3E;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAyDlF"}
|