@vennyx/solicrm-mcp 0.1.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.
@@ -0,0 +1,399 @@
1
+ import { z } from "zod";
2
+ import { McpServer, RegisteredPrompt, RegisteredResourceTemplate, RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { ActivityListQuery, CrmListQuery, SearchParams, SolicrmApiError, SolicrmClient, SolicrmError, SolicrmResponseError } from "@vennyx/solicrm";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ //#region packages/contracts/src/api-keys.d.ts
6
+ declare const apiKeyScopeSchema: z.ZodEnum<{
7
+ admin: "admin";
8
+ read: "read";
9
+ write: "write";
10
+ }>;
11
+ type ApiKeyScope = z.infer<typeof apiKeyScopeSchema>;
12
+ //#endregion
13
+ //#region packages/contracts/src/fields.d.ts
14
+ /**
15
+ * Alan kataloğu — `field_key` → kolon/tip/yetenek eşlemesi.
16
+ *
17
+ * NEDEN VAR: kaydedilmiş görünümler, filtreler, sıralama, CSV içe/dışa aktarma
18
+ * ve MCP/SDK tip üretimi HEPSİ bu katalogdan okur. Hiçbir yerde kullanıcıdan
19
+ * gelen bir değer doğrudan kolon adına dönüşmez — `resolveField()` bilinmeyen
20
+ * anahtar için `undefined` döner ve çağıran 400 verir. Bu, SQL enjeksiyonu ve
21
+ * bilgi sızdırmanın sınırıdır.
22
+ *
23
+ * İLERİYE DÖNÜK: özel alanlar (custom fields) eklendiğinde katalog runtime'da
24
+ * tenant'ın tanımlarıyla genişletilir; tüketici kod değişmez (bkz. spec §6.7).
25
+ */
26
+ declare const CRM_RESOURCES: readonly ['contacts', 'companies', 'deals', 'tasks'];
27
+ type CrmResource = (typeof CRM_RESOURCES)[number];
28
+ //#endregion
29
+ //#region packages/mcp/dist/client.d.ts
30
+ /**
31
+ * ARGÜMANLARI SDK'nın imzasından AYNEN alır, DÖNÜŞ tipini `Promise<unknown>`'a
32
+ * genişletir.
33
+ *
34
+ * NEDEN DÖNÜŞ GEVŞEK: MCP katmanı hiçbir yanıt alanını OKUMAZ — her araç
35
+ * sonucu doğrudan `jsonResult()`'a, yani `JSON.stringify`'a gider. Dönüş
36
+ * tipini burada sıkı tutmak sıfır güvenlik/doğruluk kazancı sağlar ama sahte
37
+ * bir istemcinin tipi karşılamasını İMKÂNSIZ kılar ⇒ testler ancak `as`
38
+ * cast'iyle yazılabilirdi (yasak). Yük TAŞIYAN taraf ARGÜMANLARDIR ve onlar
39
+ * TAM SIKI kalır: `CallOptions` (`{ tenantId }`) parametresinin kaçıncı
40
+ * argüman olduğu, gövde şemalarının contracts tipleriyle uyumu ve id
41
+ * parametrelerinin `string`liği hepsi SDK'nın kendi imzasından gelir.
42
+ * Gerçek `SolicrmClient` bunu karşılar (fonksiyon dönüşleri KOVARYANT).
43
+ */
44
+ type LoosenResult<TFn> = TFn extends ((...args: infer TArgs) => Promise<unknown>) ? (...args: TArgs) => Promise<unknown> : never;
45
+ type LoosenResource<TResource> = { [K in keyof TResource]: LoosenResult<TResource[K]>; };
46
+ interface McpSolicrmClient {
47
+ contacts: LoosenResource<Pick<SolicrmClient['contacts'], 'list' | 'get' | 'create' | 'update'>>;
48
+ companies: LoosenResource<Pick<SolicrmClient['companies'], 'list' | 'get' | 'create' | 'update'>>;
49
+ deals: LoosenResource<Pick<SolicrmClient['deals'], 'list' | 'get' | 'create' | 'update' | 'move'>>;
50
+ pipelines: LoosenResource<Pick<SolicrmClient['pipelines'], 'list'>>;
51
+ activities: LoosenResource<Pick<SolicrmClient['activities'], 'list' | 'create'>>;
52
+ tasks: LoosenResource<Pick<SolicrmClient['tasks'], 'list' | 'create' | 'complete'>>;
53
+ notes: LoosenResource<Pick<SolicrmClient['notes'], 'create'>>;
54
+ search: LoosenResource<Pick<SolicrmClient['search'], 'query'>>;
55
+ views: LoosenResource<Pick<SolicrmClient['views'], 'list'>>;
56
+ }
57
+ /**
58
+ * TİP DÜZEYİ KANIT — gerçek `SolicrmClient` bu dar yüzeyi KARŞILIYOR.
59
+ * Fonksiyon hiç ÇAĞRILMAZ; tek işi `tsc -b`'yi bir sapmada kırmaktır (bir
60
+ * metot adı değişir/kaldırılırsa derleme burada patlar). `as` cast'i YOK,
61
+ * çalışma zamanı maliyeti YOK.
62
+ */
63
+ declare function assertSolicrmClientSatisfiesMcpSurface(client: SolicrmClient): McpSolicrmClient;
64
+ //#endregion
65
+ //#region packages/mcp/dist/config.d.ts
66
+ interface McpConfig {
67
+ apiKey: string;
68
+ tenantId: string;
69
+ /** Verilmezse `@vennyx/solicrm`'in `DEFAULT_BASE_URL`'ü kullanılır */
70
+ baseUrl: string | undefined;
71
+ /** Bkz. KRİTİK KURAL 3 — yalnız `tools/list` filtresi */
72
+ scope: ApiKeyScope;
73
+ }
74
+ /** Bkz. KRİTİK KURAL 3 — kapsam verilmediğinde sunucuyu yetkili taraf sayarız */
75
+ declare const DEFAULT_MCP_SCOPE: ApiKeyScope;
76
+ /** `process.env` biçiminde okunabilen minimal yüzey (testte düz obje geçilir) */
77
+ type McpEnv = Record<string, string | undefined>;
78
+ declare function loadConfigFromEnv(env: McpEnv): McpConfig;
79
+ //#endregion
80
+ //#region packages/mcp/dist/transports/http.d.ts
81
+ /** Bkz. KRİTİK KURAL 1(a) */
82
+ declare const DEFAULT_HTTP_HOST = "127.0.0.1";
83
+ declare const DEFAULT_HTTP_PORT = 3737;
84
+ /** `--http` sunucusunun MCP yolu */
85
+ declare const MCP_HTTP_PATH = "/mcp";
86
+ declare const BROWSER_ORIGIN_REJECTED_MESSAGE = "Tarayıcıdan gelen istekler reddedilir (Origin başlığı taşıyor).";
87
+ interface McpHttpHandlerDeps {
88
+ /** Her istek için TAZE bir sunucu üretir (bkz. KRİTİK KURAL 3) */
89
+ createServer: () => McpServer;
90
+ }
91
+ /** Bkz. KRİTİK KURAL 1(b) — saf, tek satırlık, ayrı test edilebilir karar */
92
+ declare function hasBrowserOrigin(request: Request): boolean;
93
+ /**
94
+ * `Request → Response`. Port açmaz, soket kurmaz ⇒ testte doğrudan çağrılır.
95
+ * Protokol hataları JSON-RPC zarfıyla transport'tan gelir; BU katmanın kendi
96
+ * redleri (405/404/403) `{error}` zarfını kullanır — hosted uçtaki AYNI ayrım
97
+ * (bkz. `apps/api/src/routes/mcp.ts` KRİTİK KURAL 5).
98
+ */
99
+ declare function createMcpHttpHandler(deps: McpHttpHandlerDeps): (request: Request) => Promise<Response>;
100
+ interface McpHttpServerOptions {
101
+ handler: (request: Request) => Promise<Response>;
102
+ port?: number | undefined;
103
+ host?: string | undefined;
104
+ }
105
+ interface RunningMcpHttpServer {
106
+ host: string;
107
+ port: number;
108
+ close: () => Promise<void>;
109
+ }
110
+ /**
111
+ * `node:http` yapıştırıcısı — Node ve Bun'da AYNI şekilde çalışır (`Bun.serve`
112
+ * kullanılmadı: paket npm'e yayınlanıyor ve `npx` altında Node ile koşuyor).
113
+ */
114
+ declare function startMcpHttpServer(options: McpHttpServerOptions): Promise<RunningMcpHttpServer>;
115
+ //#endregion
116
+ //#region packages/mcp/dist/cli.d.ts
117
+ type McpTransportKind = 'stdio' | 'http';
118
+ interface CliArgs {
119
+ transport: McpTransportKind;
120
+ /** Yalnız `transport === 'http'` iken anlamlı; verilmemişse `undefined` */
121
+ port: number | undefined;
122
+ /** `--help` / `-h` verildi mi */
123
+ help: boolean;
124
+ /** `--version` / `-v` verildi mi */
125
+ version: boolean;
126
+ }
127
+ declare const USAGE = "solicrm-mcp — SoliCRM MCP sunucusu (v0.1.0)\n\nKullanım:\n solicrm-mcp stdio taşımasıyla başlar (varsayılan)\n solicrm-mcp --http [port] bağımsız Streamable HTTP sunucusu (varsayılan port 3737)\n solicrm-mcp --help bu metni yazar\n solicrm-mcp --version sürümü yazar\n\nOrtam değişkenleri:\n SOLICRM_API_KEY (zorunlu) scrm_ ile başlayan tenant API anahtarı\n SOLICRM_TENANT_ID (zorunlu) kiracı kimliği (UUID)\n SOLICRM_BASE_URL (opsiyonel) API tabanı; verilmezse https://api.solicrm.com\n SOLICRM_SCOPE (opsiyonel) read|write|admin — yalnız tools/list filtresi,\n gerçek yetki sunucuda her istekte yeniden hesaplanır";
128
+ /** Bkz. KRİTİK KURAL 3 */
129
+ declare function parsePort(raw: string): number;
130
+ declare function parseCliArgs(argv: readonly string[]): CliArgs;
131
+ interface RunCliDeps {
132
+ env?: McpEnv | undefined;
133
+ loadConfig?: ((env: McpEnv) => McpConfig) | undefined;
134
+ /** Kurulmuş bir SDK istemcisi üretir (gerçek uygulama `@vennyx/solicrm`'i kullanır) */
135
+ createClient?: ((config: McpConfig) => McpSolicrmClient) | undefined;
136
+ createServer?: ((client: McpSolicrmClient, scope: ApiKeyScope) => McpServer) | undefined;
137
+ connectStdio?: ((server: McpServer) => Promise<unknown>) | undefined;
138
+ startHttp?: ((args: {
139
+ handler: (request: Request) => Promise<Response>;
140
+ port: number | undefined;
141
+ }) => Promise<RunningMcpHttpServer>) | undefined;
142
+ /** İnsana yönelik çıktı — bkz. KRİTİK KURAL 2 */
143
+ log?: ((message: string) => void) | undefined;
144
+ }
145
+ declare function runCli(argv: readonly string[], deps?: RunCliDeps): Promise<void>;
146
+ //#endregion
147
+ //#region packages/mcp/dist/errors.d.ts
148
+ /**
149
+ * MCP katmanının KENDİ hata sınıfları — sunucudan GELMEYEN, bu paketin
150
+ * ürettiği başarısızlıklar.
151
+ *
152
+ * DİL İSTİSNASI (Global Constraints #8): buradaki mesajlar İngilizce'dir.
153
+ * "Kullanıcıya dönen mesajlar Türkçe" kuralı `apps/api`'nin `jsonError()`
154
+ * zarfı içindir; bu paket global npm tüketicilerine (Claude Code/Desktop) gider
155
+ * ve mesajları bir LLM okur. Sunucudan gelen TÜRKÇE metin ise ÇEVRİLMEZ,
156
+ * `toMcpToolError` onu AYNEN taşır (bkz. `result.ts`).
157
+ */
158
+ /** Bu paketin ürettiği her hatanın taban sınıfı — tüketici tek `catch` ile kapsar. */
159
+ declare class SolicrmMcpError extends Error {
160
+ constructor(message: string);
161
+ }
162
+ /**
163
+ * Çağıranın etkin kapsamı aracın gerektirdiği minimumun ALTINDA.
164
+ *
165
+ * KRİTİK KURAL — bu hata TEK yetki sınırı DEĞİLDİR, İKİNCİ katmandır. Gerçek
166
+ * yetki kontrolü sunucu tarafındadır: her araç çağrısı SDK üzerinden
167
+ * `/v1/tenants/:id/...` uçlarına gider ve orada
168
+ * `checkApiKeyTenantAndScope` (`apps/api/src/lib/crm-access.ts`) çalışır — o
169
+ * kontrol `effectiveScope`'u (= `ROLE_SCOPE_CEILING[güncel rol] ∩ anahtar
170
+ * kapsamı`) HER istekte DB'den YENİDEN hesaplar. Bu paketteki `scope` ise
171
+ * sunucu kurulurken bir kez alınmış bir ANLIK GÖRÜNTÜDÜR (bkz. `scope.ts`).
172
+ */
173
+ declare class McpScopeError extends SolicrmMcpError {
174
+ readonly toolName: string;
175
+ readonly requiredScope: string;
176
+ readonly actualScope: string;
177
+ constructor(params: {
178
+ toolName: string;
179
+ requiredScope: string;
180
+ actualScope: string;
181
+ });
182
+ }
183
+ /**
184
+ * Araç girdisi zod şemasını GEÇTİ ama anlamsal olarak tutarsız (ör. sıralama
185
+ * yönü verilmiş, sıralanacak alan verilmemiş).
186
+ *
187
+ * NEDEN AYRI BİR HATA: bu projenin "fail-open savunma savunma değildir"
188
+ * dersinin doğrudan uygulaması — tutarsız girdiyi SESSİZCE yok saymak
189
+ * (`sortDirection`'ı görmezden gelip sırasız sonuç döndürmek) çağırana
190
+ * "istediğin sıralamayı yaptım" yalanını söylerdi.
191
+ */
192
+ declare class McpInputError extends SolicrmMcpError {
193
+ constructor(message: string);
194
+ }
195
+ //#endregion
196
+ //#region packages/mcp/dist/list-input.d.ts
197
+ /**
198
+ * Bir CRM kaynağı için liste aracı girdi şeması. Alan adları o kaynağın
199
+ * `FIELD_CATALOG` girdisine karşı doğrulanır (bkz. KRİTİK KURAL 4).
200
+ */
201
+ declare function buildCrmListInputSchema(resource: CrmResource): z.ZodObject<{
202
+ cursor: z.ZodOptional<z.ZodString>;
203
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
204
+ sortField: z.ZodOptional<z.ZodString>;
205
+ sortDirection: z.ZodOptional<z.ZodEnum<{
206
+ asc: "asc";
207
+ desc: "desc";
208
+ }>>;
209
+ filters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
210
+ }, z.core.$strip>;
211
+ type CrmListInput = z.infer<ReturnType<typeof buildCrmListInputSchema>>;
212
+ /**
213
+ * Araç girdisini SDK'nın `CrmListQuery`'sine çevirir. `tenantId` DİYE BİR ALAN
214
+ * YOKTUR ve olamaz — tenant her zaman `SolicrmClient`'ın kurulduğu andaki
215
+ * değerdir (bkz. `server.ts` dosya başı).
216
+ */
217
+ declare function toCrmListQuery(args: CrmListInput): CrmListQuery;
218
+ /**
219
+ * Bir kaynağın sıralanabilir/filtrelenebilir alanlarını araç açıklamasına
220
+ * yazılacak metne çevirir — LLM'in geçersiz alan adı denemesini azaltır.
221
+ * Liste `FIELD_CATALOG`'dan ÜRETİLİR, elle yazılmaz.
222
+ */
223
+ declare function describeCrmListFields(resource: CrmResource): string;
224
+ //#endregion
225
+ //#region packages/mcp/dist/prompts.d.ts
226
+ declare const MCP_PROMPT_NAMES: readonly ['summarize_pipeline'];
227
+ declare function registerSummarizePipelinePrompt(server: McpServer): RegisteredPrompt;
228
+ //#endregion
229
+ //#region packages/mcp/dist/resources.d.ts
230
+ declare const MCP_RESOURCE_NAMES: readonly ['contact', 'deal'];
231
+ type McpResourceName = (typeof MCP_RESOURCE_NAMES)[number];
232
+ /** Kaynak → gereken minimum kapsam. `TOOL_MIN_SCOPE` gibi TOTAL (fail-open yok). */
233
+ declare const RESOURCE_MIN_SCOPE: Record<McpResourceName, ApiKeyScope>;
234
+ /** URI şablonu değişkeni tek değer de dizi de olabilir — ilkini alır, yoksa hata. */
235
+ declare function firstVariable(value: string | string[] | undefined, name: string): string;
236
+ declare function registerCrmResources(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpResourceName, RegisteredResourceTemplate]>;
237
+ //#endregion
238
+ //#region packages/mcp/dist/result.d.ts
239
+ /** Beklenmeyen (bizim kusurumuz olan) hatalar için TEK jenerik metin. */
240
+ declare const UNEXPECTED_ERROR_MESSAGE = "An unexpected error occurred while calling the SoliCRM API.";
241
+ /**
242
+ * SDK'nın hata sınıflarının `this.name` değerlerinin KAPALI listesi. Listede
243
+ * OLMAYAN her şey jenerik metne düşer (fail-closed).
244
+ */
245
+ declare const SDK_ERROR_NAMES: readonly string[];
246
+ /** `SolicrmApiError`'ın bu modülün OKUDUĞU alanları — yapısal sözleşme. */
247
+ interface ApiErrorShape {
248
+ status: number;
249
+ body: unknown;
250
+ serverMessage: string | undefined;
251
+ message: string;
252
+ }
253
+ /**
254
+ * TİP DÜZEYİ KANIT (a): gerçek `SolicrmApiError` yukarıdaki yapısal sözleşmeyi
255
+ * KARŞILIYOR. Hiç çağrılmaz; tek işi bir sapmada `tsc -b`'yi kırmaktır.
256
+ */
257
+ declare function assertApiErrorShape(err: SolicrmApiError): ApiErrorShape;
258
+ /**
259
+ * TİP DÜZEYİ KANIT (a-2): `SDK_ERROR_NAMES`'in karşılık geldiği ÜÇ sınıf
260
+ * gerçekten var ve hepsi `Error` alt sınıfı. Biri kaldırılır/yeniden
261
+ * adlandırılırsa import satırı ve bu imza DERLENMEZ.
262
+ */
263
+ declare function assertSdkErrorNames(errors: [SolicrmError, SolicrmApiError, SolicrmResponseError]): Error[];
264
+ /**
265
+ * `@modelcontextprotocol/sdk`'nın `CallToolResult` şeklinin bu paketin ihtiyacı
266
+ * kadarlık dar karşılığı. SDK'nın gerçek zod şeması `[x: string]: unknown`
267
+ * (loose) taşır — bu tip de UYUMLU kalmak için aynısını taşır.
268
+ */
269
+ interface ToolTextResult {
270
+ [key: string]: unknown;
271
+ content: {
272
+ type: 'text';
273
+ text: string;
274
+ }[];
275
+ isError?: boolean;
276
+ }
277
+ /** Her aracın ORTAK başarı biçimi — veriyi okunabilir (girintili) JSON metne çevirir. */
278
+ declare function jsonResult(data: unknown): ToolTextResult;
279
+ /** Bir hatayı MCP'nin `isError: true` sonucuna çevirir (JSON-RPC hatası DEĞİL). */
280
+ declare function toMcpToolError(err: unknown): ToolTextResult;
281
+ //#endregion
282
+ //#region packages/mcp/dist/scope.d.ts
283
+ /**
284
+ * Kayıtlı TÜM araçların kanonik ad listesi (spec §12.1'in 22 aracı — `search`
285
+ * dâhil; plan metninin "21 araç" sayımı hatalıdır, `search` ZATEN §12.1
286
+ * listesindedir, ona EK değildir).
287
+ *
288
+ * Bu dizi TEK gerçek kaynaktır: `TOOL_MIN_SCOPE` ondan tiplenir ve
289
+ * `test/server.test.ts` `tools/list` çıktısının bununla BİREBİR eşleştiğini
290
+ * doğrular.
291
+ */
292
+ declare const MCP_TOOL_NAMES: readonly ['list_contacts', 'get_contact', 'create_contact', 'update_contact', 'list_companies', 'get_company', 'create_company', 'update_company', 'list_deals', 'get_deal', 'create_deal', 'update_deal', 'move_deal_stage', 'list_pipelines', 'list_activities', 'create_activity', 'list_tasks', 'create_task', 'complete_task', 'create_note', 'search', 'list_saved_views'];
293
+ type McpToolName = (typeof MCP_TOOL_NAMES)[number];
294
+ /**
295
+ * Kapsam rütbeleri — `apps/api/src/lib/api-key-auth.ts`'in `SCOPE_RANK`'ıyla
296
+ * BİREBİR aynı. İçe aktarılMAZ çünkü bu paket npm'e yayınlanır ve `apps/api`'ye
297
+ * (Hono, Drizzle, Postgres) bağımlı OLAMAZ. Drift riski TİP SEVİYESİNDE
298
+ * kapatılmıştır: `Record<ApiKeyScope, number>` `@solicrm/contracts`'ın
299
+ * `apiKeyScopeSchema` enum'una bağlıdır ⇒ contracts'a dördüncü bir kapsam
300
+ * eklenirse bu satır DERLENMEZ.
301
+ */
302
+ declare const SCOPE_RANK: Record<ApiKeyScope, number>;
303
+ /** `SCOPE_RANK`'ın anahtar kümesinin contracts'la aynı olduğunu ÇALIŞMA ZAMANINDA da kanıtlanabilir kılar. */
304
+ declare const API_KEY_SCOPES: readonly ApiKeyScope[];
305
+ declare const TOOL_MIN_SCOPE: Record<McpToolName, ApiKeyScope>;
306
+ /** `actual`, `required` kapsamını karşılıyor mu (read < write < admin) */
307
+ declare function scopeSatisfies(actual: ApiKeyScope, required: ApiKeyScope): boolean;
308
+ /**
309
+ * Çağrı-anı kapsam kapısı — HER araç handler'ının İLK satırı (bkz. KRİTİK
310
+ * KURAL 3/b). Yetersizse fırlatır; `toMcpToolError` bunu `isError: true`
311
+ * sonucuna çevirir.
312
+ */
313
+ declare function assertScope(scope: ApiKeyScope, toolName: McpToolName): void;
314
+ //#endregion
315
+ //#region packages/mcp/dist/server.d.ts
316
+ /** `dist/cli.js`'nin (Task 4) `package.json` okumadan taşıdığı sürüm sabiti. */
317
+ declare const SOLICRM_MCP_VERSION = "0.1.0";
318
+ declare const SOLICRM_MCP_SERVER_NAME = "solicrm";
319
+ /**
320
+ * Verilen istemci ve etkin kapsam için TAZE bir `McpServer` kurar.
321
+ *
322
+ * @param client Kurulmuş `SolicrmClient` — `tenantId`'si (ve API anahtarı)
323
+ * çağıranın kimliğinden gelir; bu fonksiyon onu SORGULAMAZ ve DEĞİŞTİRMEZ.
324
+ * @param scope Çağıranın ŞU ANDAKİ etkin kapsamı (`ROLE_SCOPE_CEILING[rol] ∩
325
+ * anahtar kapsamı`). Anlık görüntüdür — bkz. `scope.ts` KRİTİK KURAL 2.
326
+ */
327
+ declare function createSolicrmMcpServer(client: McpSolicrmClient, scope: ApiKeyScope): McpServer;
328
+ //#endregion
329
+ //#region packages/mcp/dist/tools/activities.d.ts
330
+ declare const listActivitiesInputSchema: z.ZodObject<{
331
+ cursor: z.ZodOptional<z.ZodString>;
332
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
333
+ targetType: z.ZodOptional<z.ZodEnum<{
334
+ company: "company";
335
+ contact: "contact";
336
+ deal: "deal";
337
+ }>>;
338
+ targetId: z.ZodOptional<z.ZodUUID>;
339
+ }, z.core.$strip>;
340
+ type ListActivitiesInput = z.infer<typeof listActivitiesInputSchema>;
341
+ declare function toActivityListQuery(args: ListActivitiesInput): ActivityListQuery;
342
+ declare function registerActivityTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
343
+ //#endregion
344
+ //#region packages/mcp/dist/tools/companies.d.ts
345
+ declare function registerCompanyTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
346
+ //#endregion
347
+ //#region packages/mcp/dist/tools/contacts.d.ts
348
+ declare function registerContactTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
349
+ //#endregion
350
+ //#region packages/mcp/dist/tools/deals.d.ts
351
+ declare function registerDealTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
352
+ //#endregion
353
+ //#region packages/mcp/dist/tools/define.d.ts
354
+ /**
355
+ * Bir araç handler'ını MCP callback'ine çevirir: kapsam kapısı → handler →
356
+ * `jsonResult`; her fırlatma `isError: true` sonucuna dönüşür (JSON-RPC
357
+ * hatasına DEĞİL — LLM hatayı okuyup düzeltebilsin).
358
+ */
359
+ declare function guarded<TArgs>(scope: ApiKeyScope, name: McpToolName, handler: (args: TArgs) => Promise<unknown>): (args: TArgs) => Promise<ToolTextResult>;
360
+ /** Girdi almayan araçlar için (`list_pipelines`) — aynı üç garanti, argümansız. */
361
+ declare function guardedNoArgs(scope: ApiKeyScope, name: McpToolName, handler: () => Promise<unknown>): () => Promise<ToolTextResult>;
362
+ //#endregion
363
+ //#region packages/mcp/dist/tools/ids.d.ts
364
+ /** `label` Türkçe okunur bir isimdir ("kişi", "şirket", "fırsat"...) */
365
+ declare function idField(label: string): z.ZodUUID;
366
+ //#endregion
367
+ //#region packages/mcp/dist/tools/notes.d.ts
368
+ declare function registerNoteTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
369
+ //#endregion
370
+ //#region packages/mcp/dist/tools/pipelines.d.ts
371
+ declare function registerPipelineTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
372
+ //#endregion
373
+ //#region packages/mcp/dist/tools/search.d.ts
374
+ declare const searchInputSchema: z.ZodObject<{
375
+ q: z.ZodString;
376
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
377
+ resources: z.ZodOptional<z.ZodArray<z.ZodEnum<{
378
+ companies: "companies";
379
+ contacts: "contacts";
380
+ deals: "deals";
381
+ }>>>;
382
+ }, z.core.$strip>;
383
+ type SearchInput = z.infer<typeof searchInputSchema>;
384
+ declare function toSearchParams(args: SearchInput): SearchParams;
385
+ declare function registerSearchTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
386
+ //#endregion
387
+ //#region packages/mcp/dist/tools/tasks.d.ts
388
+ declare function registerTaskTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
389
+ //#endregion
390
+ //#region packages/mcp/dist/tools/views.d.ts
391
+ declare function registerSavedViewTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
392
+ //#endregion
393
+ //#region packages/mcp/dist/tools/index.d.ts
394
+ declare function registerAllTools(server: McpServer, client: McpSolicrmClient, scope: ApiKeyScope): Array<[McpToolName, RegisteredTool]>;
395
+ //#endregion
396
+ //#region packages/mcp/dist/transports/stdio.d.ts
397
+ declare function connectStdioTransport(server: McpServer): Promise<StdioServerTransport>;
398
+ //#endregion
399
+ export { API_KEY_SCOPES, type ApiKeyScope, BROWSER_ORIGIN_REJECTED_MESSAGE, type CliArgs, type CrmListInput, DEFAULT_HTTP_HOST, DEFAULT_HTTP_PORT, DEFAULT_MCP_SCOPE, MCP_HTTP_PATH, MCP_PROMPT_NAMES, MCP_RESOURCE_NAMES, MCP_TOOL_NAMES, type McpConfig, type McpEnv, type McpHttpHandlerDeps, McpInputError, type McpResourceName, McpScopeError, type McpSolicrmClient, type McpToolName, type McpTransportKind, RESOURCE_MIN_SCOPE, type RunCliDeps, type RunningMcpHttpServer, SCOPE_RANK, SDK_ERROR_NAMES, SOLICRM_MCP_SERVER_NAME, SOLICRM_MCP_VERSION, SolicrmMcpError, TOOL_MIN_SCOPE, type ToolTextResult, UNEXPECTED_ERROR_MESSAGE, USAGE, apiKeyScopeSchema, assertApiErrorShape, assertScope, assertSdkErrorNames, assertSolicrmClientSatisfiesMcpSurface, buildCrmListInputSchema, connectStdioTransport, createMcpHttpHandler, createSolicrmMcpServer, describeCrmListFields, firstVariable, guarded, guardedNoArgs, hasBrowserOrigin, idField, jsonResult, loadConfigFromEnv, parseCliArgs, parsePort, registerActivityTools, registerAllTools, registerCompanyTools, registerContactTools, registerCrmResources, registerDealTools, registerNoteTools, registerPipelineTools, registerSavedViewTools, registerSearchTools, registerSummarizePipelinePrompt, registerTaskTools, runCli, scopeSatisfies, startMcpHttpServer, toActivityListQuery, toCrmListQuery, toMcpToolError, toSearchParams };