Děkujeme za váš zájem o přispění do Upgates MCP Server! 🎉
- Zkontrolujte issues, zda chyba již nebyla nahlášena
- Vytvořte nový issue s:
- Popisem chyby
- Kroky k reprodukci
- Očekávané vs. skutečné chování
- Verze projektu a Node.js
- Log výstupy (bez citlivých dat!)
- Otevřete discussion nebo issue
- Popište:
- Jakou funkci chcete
- Proč by byla užitečná
- Jak by měla fungovat
- Fork repository
- Clone váš fork
- Vytvořte branch:
git checkout -b feature/moje-nova-funkce - Proveďte změny
- Testy:
npm test(všechny musí projít) - Build:
npm run build(bez chyb) - Commit:
git commit -m "feat: popis změny" - Push:
git push origin feature/moje-nova-funkce - Vytvořte PR na GitHub
- Node.js 18+
- npm
- TypeScript znalosti
- Upgates e-shop s API přístupem (pro testování)
git clone https://github.com/LukasOrcik/upgates-com-mcp.git
cd upgates-com-mcp
npm install
npm run build# Watch mode - automatický rebuild při změnách
npm run dev
# Spustit testy
npm test
# Testy ve watch mode
npm run test:watch
# Build
npm run build
# Clean
npm run clean- Vytvořte API přístup v Upgates admin (Doplňky > API)
- Nakonfigurujte credentials v
.mcp.json(nekomiťte!) - Testujte pomocí direct handler calls nebo MCP client
- Strict mode je povolen
- Používejte explicit types kde je to možné
- Avoid
anypokud to není nutné - Dokumentujte public API pomocí JSDoc
- Files: kebab-case (
order-handler.ts) - Classes: PascalCase (
UpgatesClient) - Functions: camelCase (
handleListOrders) - Constants: UPPER_SNAKE_CASE (
DEFAULT_PAGE_SIZE) - Interfaces: PascalCase (
UpgatesConfig)
src/
├── index.ts # Entry point
├── server.ts # MCP Server
├── upgates-client.ts # API client
├── types.ts # Type definitions
├── config/ # Configuration
├── errors/ # Error classes
├── validators/ # Input validation
├── optimizers/ # Response optimization
├── handlers/
│ ├── tools.ts # Tool handlers
│ └── resources.ts # Resource handlers
└── tools/
└── definitions.ts # Tool schemas
{
name: 'my_new_tool',
description: 'Short description of what it does',
inputSchema: {
type: 'object',
properties: {
param1: {
type: 'string',
description: 'Parameter description',
},
},
required: ['param1'],
},
}async function handleMyNewTool(
client: UpgatesClient,
params: Record<string, any>
): Promise<any> {
// Validate inputs
validateRequired(params.param1, 'param1');
// Call API
const response = await client.get('/endpoint', params);
// Optimize if needed
let data = optimizeListResponse(response.data, 'entity_type');
// Anonymize if needed
return client.isAnonymizationEnabled()
? client.getAnonymizedData(data)
: data;
}case 'my_new_tool':
return handleMyNewTool(client, params);const WRITE_OPERATIONS = new Set([
'my_new_tool', // Pokud mění data
]);Vytvořte *.test.ts soubor s unit testy.
Pokud nový endpoint vrací velké množství dat:
export function optimizeMyEntity(entity: any): any {
return {
id: entity.id,
name: entity.name,
// Jen podstatná pole!
};
}case 'my_entities':
optimized.my_entities = (data.my_entities?.slice(0, maxItems) || [])
.map(optimizeMyEntity);
break;npm testVytvářejte testy pro:
- Validators
- Error handling
- Optimizers
- Důležitou business logiku
Test s live API (bez commitování credentials):
node /tmp/test-my-feature.mjsPoužívejte Conventional Commits:
feat: Přidání nového nástroje list_xyzfix: Oprava duplicitních URL v endpointsdocs: Aktualizace README s novými funkcemitest: Přidání testů pro anonymizacirefactor: Zlepšení optimizátorůperf: Optimalizace token reduction
Při přidání nové funkce aktualizujte:
- ✅ README.md - User-facing dokumentace
- ✅ CHANGELOG.md - Seznam změn
- ✅ Inline JSDoc komentáře
- ✅ Případně docs/ složka
Všechny PR procházejí review. Budeme kontrolovat:
- ✅ TypeScript type safety
- ✅ Error handling
- ✅ Tests pass
- ✅ Build successful
- ✅ Dokumentace aktualizovaná
- ✅ No sensitive data committed
- ✅ Code quality a čitelnost
- ❌ NIKDY necomitujte credentials nebo API keys
- ✅ Testujte s readonly mode
- ✅ Validujte všechny vstupy
- ✅ Používejte anonymizaci při testování
- ✅ Optimalizujte pro LLM (token reduction)
- ✅ Používejte pagination
- ✅ Cachujte statická data
- ✅ Respektujte API rate limits
- ✅ Node.js 18+
- ✅ TypeScript 5+
- ✅ ES Modules (type: "module")
Přispěním do tohoto projektu souhlasíte s tím, že váš kód bude licencován pod CC-BY-NC-4.0.
Děkujeme za vaše příspěvky! ❤️