fa-mcp-sdk 0.4.76 → 0.4.79

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.
Files changed (198) hide show
  1. package/README.md +319 -314
  2. package/bin/fa-mcp.js +85 -68
  3. package/cli-template/.claude/agents/javascript-pro.md +276 -276
  4. package/cli-template/.claude/settings.json +50 -50
  5. package/cli-template/.claude/skills/upgrade-guide/SKILL.md +2 -1
  6. package/cli-template/.oxfmtrc.json +41 -0
  7. package/cli-template/.oxlintrc.json +120 -0
  8. package/cli-template/CLAUDE.md +358 -355
  9. package/cli-template/FA-MCP-SDK-DOC/00-FA-MCP-SDK-index.md +132 -132
  10. package/cli-template/FA-MCP-SDK-DOC/01-getting-started.md +146 -146
  11. package/cli-template/FA-MCP-SDK-DOC/02-1-tools-and-api.md +431 -431
  12. package/cli-template/FA-MCP-SDK-DOC/02-2-prompts-and-resources.md +201 -201
  13. package/cli-template/FA-MCP-SDK-DOC/03-configuration.md +384 -384
  14. package/cli-template/FA-MCP-SDK-DOC/04-authentication.md +412 -412
  15. package/cli-template/FA-MCP-SDK-DOC/05-ad-authorization.md +196 -196
  16. package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +163 -163
  17. package/cli-template/FA-MCP-SDK-DOC/07-testing-and-operations.md +127 -127
  18. package/cli-template/jest.config.js +27 -30
  19. package/cli-template/package.json +10 -5
  20. package/cli-template/prompt-example-new-MCP.md +101 -101
  21. package/cli-template/readme-docs/SKILLS.md +1 -1
  22. package/cli-template/tsconfig.json +58 -58
  23. package/cli-template/update.cjs +41 -38
  24. package/config/custom-environment-variables.yaml +63 -63
  25. package/config/development.yaml +4 -4
  26. package/config/production.yaml +4 -4
  27. package/config/test.yaml +26 -26
  28. package/dist/core/_types_/TNtlm.d.ts.map +1 -1
  29. package/dist/core/_types_/active-directory-config.d.ts.map +1 -1
  30. package/dist/core/_types_/config.d.ts.map +1 -1
  31. package/dist/core/_types_/types.d.ts.map +1 -1
  32. package/dist/core/ad/group-checker.d.ts.map +1 -1
  33. package/dist/core/ad/group-checker.js.map +1 -1
  34. package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -1
  35. package/dist/core/agent-tester/agent-tester-router.js +6 -6
  36. package/dist/core/agent-tester/agent-tester-router.js.map +1 -1
  37. package/dist/core/agent-tester/check-llm.d.ts.map +1 -1
  38. package/dist/core/agent-tester/check-llm.js.map +1 -1
  39. package/dist/core/agent-tester/services/SummaryMemory.d.ts.map +1 -1
  40. package/dist/core/agent-tester/services/SummaryMemory.js +3 -9
  41. package/dist/core/agent-tester/services/SummaryMemory.js.map +1 -1
  42. package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -1
  43. package/dist/core/agent-tester/services/TesterAgentService.js +25 -27
  44. package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -1
  45. package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -1
  46. package/dist/core/agent-tester/services/TesterMcpClientService.js +26 -25
  47. package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -1
  48. package/dist/core/auth/admin-auth.d.ts.map +1 -1
  49. package/dist/core/auth/admin-auth.js +5 -5
  50. package/dist/core/auth/admin-auth.js.map +1 -1
  51. package/dist/core/auth/agent-tester-auth.d.ts.map +1 -1
  52. package/dist/core/auth/agent-tester-auth.js +1 -6
  53. package/dist/core/auth/agent-tester-auth.js.map +1 -1
  54. package/dist/core/auth/basic.d.ts.map +1 -1
  55. package/dist/core/auth/basic.js.map +1 -1
  56. package/dist/core/auth/ip-check.d.ts.map +1 -1
  57. package/dist/core/auth/ip-check.js +1 -1
  58. package/dist/core/auth/ip-check.js.map +1 -1
  59. package/dist/core/auth/jwt.d.ts.map +1 -1
  60. package/dist/core/auth/jwt.js +1 -1
  61. package/dist/core/auth/jwt.js.map +1 -1
  62. package/dist/core/auth/middleware.d.ts.map +1 -1
  63. package/dist/core/auth/middleware.js +9 -6
  64. package/dist/core/auth/middleware.js.map +1 -1
  65. package/dist/core/auth/multi-auth.d.ts.map +1 -1
  66. package/dist/core/auth/multi-auth.js +6 -6
  67. package/dist/core/auth/multi-auth.js.map +1 -1
  68. package/dist/core/auth/revocation.d.ts.map +1 -1
  69. package/dist/core/auth/revocation.js +2 -6
  70. package/dist/core/auth/revocation.js.map +1 -1
  71. package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.d.ts.map +1 -1
  72. package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js +2 -2
  73. package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js.map +1 -1
  74. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js +1 -1
  75. package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js.map +1 -1
  76. package/dist/core/auth/token-generator/ntlm/ntlm-integration.d.ts.map +1 -1
  77. package/dist/core/auth/token-generator/ntlm/ntlm-integration.js +4 -2
  78. package/dist/core/auth/token-generator/ntlm/ntlm-integration.js.map +1 -1
  79. package/dist/core/auth/token-generator/server.d.ts.map +1 -1
  80. package/dist/core/auth/token-generator/server.js.map +1 -1
  81. package/dist/core/bootstrap/init-config.d.ts.map +1 -1
  82. package/dist/core/bootstrap/init-config.js +2 -2
  83. package/dist/core/bootstrap/init-config.js.map +1 -1
  84. package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
  85. package/dist/core/bootstrap/startup-info.js +3 -7
  86. package/dist/core/bootstrap/startup-info.js.map +1 -1
  87. package/dist/core/cache/cache.d.ts.map +1 -1
  88. package/dist/core/cache/cache.js +2 -2
  89. package/dist/core/cache/cache.js.map +1 -1
  90. package/dist/core/consul/deregister.d.ts.map +1 -1
  91. package/dist/core/consul/deregister.js.map +1 -1
  92. package/dist/core/consul/get-consul-api.d.ts.map +1 -1
  93. package/dist/core/consul/get-consul-api.js +1 -2
  94. package/dist/core/consul/get-consul-api.js.map +1 -1
  95. package/dist/core/db/pg-db.d.ts.map +1 -1
  96. package/dist/core/db/pg-db.js +3 -3
  97. package/dist/core/db/pg-db.js.map +1 -1
  98. package/dist/core/debug.d.ts.map +1 -1
  99. package/dist/core/debug.js.map +1 -1
  100. package/dist/core/errors/BaseMcpError.d.ts.map +1 -1
  101. package/dist/core/errors/BaseMcpError.js.map +1 -1
  102. package/dist/core/errors/ValidationError.d.ts.map +1 -1
  103. package/dist/core/errors/ValidationError.js.map +1 -1
  104. package/dist/core/errors/errors.d.ts.map +1 -1
  105. package/dist/core/errors/errors.js +1 -1
  106. package/dist/core/errors/errors.js.map +1 -1
  107. package/dist/core/index.d.ts +6 -6
  108. package/dist/core/index.d.ts.map +1 -1
  109. package/dist/core/index.js +5 -5
  110. package/dist/core/index.js.map +1 -1
  111. package/dist/core/init-mcp-server.d.ts.map +1 -1
  112. package/dist/core/init-mcp-server.js.map +1 -1
  113. package/dist/core/logger.d.ts.map +1 -1
  114. package/dist/core/logger.js +1 -1
  115. package/dist/core/logger.js.map +1 -1
  116. package/dist/core/mcp/create-mcp-server.d.ts.map +1 -1
  117. package/dist/core/mcp/create-mcp-server.js +1 -1
  118. package/dist/core/mcp/create-mcp-server.js.map +1 -1
  119. package/dist/core/mcp/prompts.d.ts.map +1 -1
  120. package/dist/core/mcp/prompts.js.map +1 -1
  121. package/dist/core/mcp/readme-assembler.d.ts.map +1 -1
  122. package/dist/core/mcp/readme-assembler.js +3 -1
  123. package/dist/core/mcp/readme-assembler.js.map +1 -1
  124. package/dist/core/mcp/resources.d.ts.map +1 -1
  125. package/dist/core/mcp/resources.js.map +1 -1
  126. package/dist/core/mcp/server-stdio.d.ts.map +1 -1
  127. package/dist/core/utils/formatToolResult.d.ts.map +1 -1
  128. package/dist/core/utils/formatToolResult.js.map +1 -1
  129. package/dist/core/utils/port-checker.d.ts.map +1 -1
  130. package/dist/core/utils/port-checker.js.map +1 -1
  131. package/dist/core/utils/rate-limit.d.ts.map +1 -1
  132. package/dist/core/utils/rate-limit.js +2 -8
  133. package/dist/core/utils/rate-limit.js.map +1 -1
  134. package/dist/core/utils/testing/BaseMcpClient.d.ts.map +1 -1
  135. package/dist/core/utils/testing/BaseMcpClient.js.map +1 -1
  136. package/dist/core/utils/testing/McpHttpClient.d.ts.map +1 -1
  137. package/dist/core/utils/testing/McpHttpClient.js +2 -2
  138. package/dist/core/utils/testing/McpHttpClient.js.map +1 -1
  139. package/dist/core/utils/testing/McpSseClient.d.ts.map +1 -1
  140. package/dist/core/utils/testing/McpSseClient.js +3 -8
  141. package/dist/core/utils/testing/McpSseClient.js.map +1 -1
  142. package/dist/core/utils/testing/McpStdioClient.d.ts.map +1 -1
  143. package/dist/core/utils/testing/McpStdioClient.js.map +1 -1
  144. package/dist/core/utils/testing/McpStreamableHttpClient.d.ts.map +1 -1
  145. package/dist/core/utils/testing/McpStreamableHttpClient.js +7 -8
  146. package/dist/core/utils/testing/McpStreamableHttpClient.js.map +1 -1
  147. package/dist/core/utils/utils.d.ts.map +1 -1
  148. package/dist/core/utils/utils.js +3 -5
  149. package/dist/core/utils/utils.js.map +1 -1
  150. package/dist/core/web/admin-router.d.ts.map +1 -1
  151. package/dist/core/web/admin-router.js +3 -3
  152. package/dist/core/web/admin-router.js.map +1 -1
  153. package/dist/core/web/cors.d.ts.map +1 -1
  154. package/dist/core/web/cors.js.map +1 -1
  155. package/dist/core/web/favicon-svg.d.ts.map +1 -1
  156. package/dist/core/web/favicon-svg.js +1 -5
  157. package/dist/core/web/favicon-svg.js.map +1 -1
  158. package/dist/core/web/home-api.d.ts.map +1 -1
  159. package/dist/core/web/home-api.js +7 -8
  160. package/dist/core/web/home-api.js.map +1 -1
  161. package/dist/core/web/openapi.d.ts.map +1 -1
  162. package/dist/core/web/openapi.js +1 -3
  163. package/dist/core/web/openapi.js.map +1 -1
  164. package/dist/core/web/server-http.d.ts.map +1 -1
  165. package/dist/core/web/server-http.js +4 -4
  166. package/dist/core/web/server-http.js.map +1 -1
  167. package/dist/core/web/static/agent-tester/index.html +323 -323
  168. package/dist/core/web/static/agent-tester/script.js +311 -200
  169. package/dist/core/web/static/agent-tester/styles.css +1840 -1840
  170. package/dist/core/web/static/home/index.html +220 -220
  171. package/dist/core/web/static/home/script.js +72 -43
  172. package/dist/core/web/static/styles.css +927 -927
  173. package/dist/core/web/static/token-gen/index.html +136 -136
  174. package/dist/core/web/static/token-gen/script.js +58 -56
  175. package/dist/core/web/svg-icons.d.ts.map +1 -1
  176. package/dist/core/web/svg-icons.js +1 -5
  177. package/dist/core/web/svg-icons.js.map +1 -1
  178. package/package.json +10 -5
  179. package/{cli-template/.claude/hooks/eslint-fix.cjs → scripts/cc-hook-oxlint-oxfmt-fix.cjs} +109 -100
  180. package/scripts/generate-jwt.js +5 -9
  181. package/scripts/kill-port.js +5 -2
  182. package/scripts/npm/run.js +1 -2
  183. package/scripts/remove-nul.js +1 -1
  184. package/scripts/update-sdk.js +36 -14
  185. package/src/template/api/router.ts +3 -3
  186. package/src/template/prompts/agent-brief.ts +0 -1
  187. package/src/template/start.ts +3 -8
  188. package/src/template/tools/handle-tool-call.ts +3 -3
  189. package/src/template/tools/tools.ts +3 -7
  190. package/src/tests/jest-simple-reporter.js +1 -1
  191. package/src/tests/mcp/sse/mcp-sse-client-handling.md +111 -111
  192. package/src/tests/mcp/sse/test-sse-npm-package.js +2 -3
  193. package/src/tests/mcp/test-cases.js +6 -7
  194. package/src/tests/mcp/test-http.js +2 -2
  195. package/src/tests/mcp/test-sse.js +9 -7
  196. package/src/tests/mcp/test-stdio.js +12 -8
  197. package/src/tests/utils.ts +4 -3
  198. package/cli-template/eslint.config.js +0 -27
@@ -1,132 +1,132 @@
1
- # FA-MCP-SDK Documentation Index
2
-
3
- TypeScript framework for building MCP servers.
4
-
5
- ## Quick Start
6
-
7
- ```bash
8
- npm install fa-mcp-sdk
9
- ```
10
-
11
- ## Documentation Structure
12
-
13
- | File | Content | Read When |
14
- |------|---------|-----------|
15
- | [01-getting-started](01-getting-started.md) | `initMcpServer()`, `McpServerData`, `IPromptData`, `IResourceData`, `AppConfig` | Starting new project |
16
- | [02-1-tools-and-api](02-1-tools-and-api.md) | Tool definitions, `toolHandler`, outbound webhooks, REST API with tsoa, OpenAPI/Swagger | Creating tools, REST endpoints, webhook callbacks |
17
- | [02-2-prompts-and-resources](02-2-prompts-and-resources.md) | Standard/custom prompts, resources, `requireAuth` | Configuring prompts/resources |
18
- | [03-configuration](03-configuration.md) | `appConfig`, YAML config, access points for external services, cache | Server configuration, external services |
19
- | [04-authentication](04-authentication.md) | JWT, Basic auth, server tokens, `createAuthMW()`, Token Generator, CLI Token Generator, JWT Generation API | Authentication setup |
20
- | [05-ad-authorization](05-ad-authorization.md) | AD group authorization at HTTP/tool levels | AD group restrictions |
21
- | [06-utilities](06-utilities.md) | `ServerError`, `normalizeHeaders`, logging, Consul, graceful shutdown | Error handling, utilities |
22
- | [07-testing-and-operations](07-testing-and-operations.md) | Test clients (STDIO, HTTP, SSE, Streamable HTTP) | Testing, deployment |
23
- | [08-agent-tester-and-headless-api](08-agent-tester-and-headless-api.md) | Agent Tester, Headless API, structured logging, automated testing, UI `data-testid` reference | Agent-driven tool development, CLI automation, UI E2E tests |
24
- | [09-database](09-database.md) | PostgreSQL sugar layer (`queryMAIN`, `execMAIN`, `getInsertSqlMAIN`, `getMergeSqlMAIN`, `mergeByBatch`), `pgvector`, secondary DBs | Database access, upserts, batching |
25
-
26
- ## Key Exports
27
-
28
- ```typescript
29
- // Core
30
- import { initMcpServer, McpServerData, appConfig, getProjectData, getSafeAppConfig, ROOT_PROJECT_DIR } from 'fa-mcp-sdk';
31
-
32
- // Auth
33
- import { createAuthMW, generateToken, getAuthHeadersForTests, TTokenType, generateTokenApp } from 'fa-mcp-sdk';
34
-
35
- // Tools & Errors
36
- import { formatToolResult, ToolExecutionError, ServerError, BaseMcpError, ValidationError, getTools } from 'fa-mcp-sdk';
37
-
38
- // Database & Cache
39
- import {
40
- queryMAIN, queryRsMAIN, oneRowMAIN, execMAIN,
41
- getInsertSqlMAIN, getMergeSqlMAIN, mergeByBatch,
42
- checkMainDB, getMainDBConnectionStatus,
43
- IQueryPgArgsCOptional,
44
- getCache,
45
- } from 'fa-mcp-sdk';
46
-
47
- // Utilities
48
- import { logger, fileLogger, Logger, trim, ppj, toError, toStr, normalizeHeaders } from 'fa-mcp-sdk';
49
-
50
- // Test Clients
51
- import { McpHttpClient, McpStdioClient, McpSseClient, McpStreamableHttpClient } from 'fa-mcp-sdk';
52
-
53
- // AD Groups
54
- import { initADGroupChecker, IADConfig, IDcConfig } from 'fa-mcp-sdk';
55
-
56
- // OpenAPI
57
- import { configureOpenAPI, OpenAPISpecResponse, SwaggerUIConfig } from 'fa-mcp-sdk';
58
- ```
59
-
60
- ## Project Structure
61
-
62
- ```
63
- my-mcp-server/
64
- ├── config/
65
- │ ├── default.yaml # Base configuration
66
- │ ├── development.yaml # Dev overrides
67
- │ ├── local.yaml # Local secrets (gitignored)
68
- │ └── production.yaml # Prod overrides
69
- ├── src/
70
- │ ├── _types_/
71
- │ │ └── custom-config.ts # Custom config interface
72
- │ ├── api/
73
- │ │ └── router.ts # REST endpoints (tsoa)
74
- │ ├── prompts/
75
- │ │ ├── agent-brief.ts # Short agent description
76
- │ │ ├── agent-prompt.ts # Full agent prompt
77
- │ │ └── custom-prompts.ts # Additional prompts
78
- │ ├── tools/
79
- │ │ ├── handle-tool-call.ts # Tool execution
80
- │ │ └── tools.ts # Tool definitions
81
- │ ├── custom-resources.ts # Custom MCP resources
82
- │ └── start.ts # Entry point
83
- └── tests/
84
- ```
85
-
86
- ## Minimal Example
87
-
88
- **`src/start.ts`:**
89
- ```typescript
90
- import { initMcpServer, McpServerData } from 'fa-mcp-sdk';
91
- import { tools } from './tools/tools.js';
92
- import { handleToolCall } from './tools/handle-tool-call.js';
93
-
94
- const serverData: McpServerData = {
95
- tools,
96
- toolHandler: handleToolCall,
97
- agentBrief: 'My MCP Server',
98
- agentPrompt: 'You are a helpful assistant.',
99
- };
100
-
101
- await initMcpServer(serverData);
102
- ```
103
-
104
- **`src/tools/tools.ts`:**
105
- ```typescript
106
- import { Tool } from '@modelcontextprotocol/sdk/types.js';
107
-
108
- export const tools: Tool[] = [{
109
- name: 'hello',
110
- description: 'Say hello',
111
- inputSchema: {
112
- type: 'object',
113
- properties: { name: { type: 'string', description: 'Name to greet' } },
114
- required: ['name']
115
- }
116
- }];
117
- ```
118
-
119
- **`src/tools/handle-tool-call.ts`:**
120
- ```typescript
121
- import { formatToolResult, ToolExecutionError } from 'fa-mcp-sdk';
122
-
123
- export const handleToolCall = async (params: { name: string; arguments?: any }): Promise<any> => {
124
- const { name, arguments: args } = params;
125
- switch (name) {
126
- case 'hello':
127
- return formatToolResult({ message: `Hello, ${args.name}!` });
128
- default:
129
- throw new ToolExecutionError(name, `Unknown tool: ${name}`);
130
- }
131
- };
132
- ```
1
+ # FA-MCP-SDK Documentation Index
2
+
3
+ TypeScript framework for building MCP servers.
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ npm install fa-mcp-sdk
9
+ ```
10
+
11
+ ## Documentation Structure
12
+
13
+ | File | Content | Read When |
14
+ |------|---------|-----------|
15
+ | [01-getting-started](01-getting-started.md) | `initMcpServer()`, `McpServerData`, `IPromptData`, `IResourceData`, `AppConfig` | Starting new project |
16
+ | [02-1-tools-and-api](02-1-tools-and-api.md) | Tool definitions, `toolHandler`, outbound webhooks, REST API with tsoa, OpenAPI/Swagger | Creating tools, REST endpoints, webhook callbacks |
17
+ | [02-2-prompts-and-resources](02-2-prompts-and-resources.md) | Standard/custom prompts, resources, `requireAuth` | Configuring prompts/resources |
18
+ | [03-configuration](03-configuration.md) | `appConfig`, YAML config, access points for external services, cache | Server configuration, external services |
19
+ | [04-authentication](04-authentication.md) | JWT, Basic auth, server tokens, `createAuthMW()`, Token Generator, CLI Token Generator, JWT Generation API | Authentication setup |
20
+ | [05-ad-authorization](05-ad-authorization.md) | AD group authorization at HTTP/tool levels | AD group restrictions |
21
+ | [06-utilities](06-utilities.md) | `ServerError`, `normalizeHeaders`, logging, Consul, graceful shutdown | Error handling, utilities |
22
+ | [07-testing-and-operations](07-testing-and-operations.md) | Test clients (STDIO, HTTP, SSE, Streamable HTTP) | Testing, deployment |
23
+ | [08-agent-tester-and-headless-api](08-agent-tester-and-headless-api.md) | Agent Tester, Headless API, structured logging, automated testing, UI `data-testid` reference | Agent-driven tool development, CLI automation, UI E2E tests |
24
+ | [09-database](09-database.md) | PostgreSQL sugar layer (`queryMAIN`, `execMAIN`, `getInsertSqlMAIN`, `getMergeSqlMAIN`, `mergeByBatch`), `pgvector`, secondary DBs | Database access, upserts, batching |
25
+
26
+ ## Key Exports
27
+
28
+ ```typescript
29
+ // Core
30
+ import { initMcpServer, McpServerData, appConfig, getProjectData, getSafeAppConfig, ROOT_PROJECT_DIR } from 'fa-mcp-sdk';
31
+
32
+ // Auth
33
+ import { createAuthMW, generateToken, getAuthHeadersForTests, TTokenType, generateTokenApp } from 'fa-mcp-sdk';
34
+
35
+ // Tools & Errors
36
+ import { formatToolResult, ToolExecutionError, ServerError, BaseMcpError, ValidationError, getTools } from 'fa-mcp-sdk';
37
+
38
+ // Database & Cache
39
+ import {
40
+ queryMAIN, queryRsMAIN, oneRowMAIN, execMAIN,
41
+ getInsertSqlMAIN, getMergeSqlMAIN, mergeByBatch,
42
+ checkMainDB, getMainDBConnectionStatus,
43
+ IQueryPgArgsCOptional,
44
+ getCache,
45
+ } from 'fa-mcp-sdk';
46
+
47
+ // Utilities
48
+ import { logger, fileLogger, Logger, trim, ppj, toError, toStr, normalizeHeaders } from 'fa-mcp-sdk';
49
+
50
+ // Test Clients
51
+ import { McpHttpClient, McpStdioClient, McpSseClient, McpStreamableHttpClient } from 'fa-mcp-sdk';
52
+
53
+ // AD Groups
54
+ import { initADGroupChecker, IADConfig, IDcConfig } from 'fa-mcp-sdk';
55
+
56
+ // OpenAPI
57
+ import { configureOpenAPI, OpenAPISpecResponse, SwaggerUIConfig } from 'fa-mcp-sdk';
58
+ ```
59
+
60
+ ## Project Structure
61
+
62
+ ```
63
+ my-mcp-server/
64
+ ├── config/
65
+ │ ├── default.yaml # Base configuration
66
+ │ ├── development.yaml # Dev overrides
67
+ │ ├── local.yaml # Local secrets (gitignored)
68
+ │ └── production.yaml # Prod overrides
69
+ ├── src/
70
+ │ ├── _types_/
71
+ │ │ └── custom-config.ts # Custom config interface
72
+ │ ├── api/
73
+ │ │ └── router.ts # REST endpoints (tsoa)
74
+ │ ├── prompts/
75
+ │ │ ├── agent-brief.ts # Short agent description
76
+ │ │ ├── agent-prompt.ts # Full agent prompt
77
+ │ │ └── custom-prompts.ts # Additional prompts
78
+ │ ├── tools/
79
+ │ │ ├── handle-tool-call.ts # Tool execution
80
+ │ │ └── tools.ts # Tool definitions
81
+ │ ├── custom-resources.ts # Custom MCP resources
82
+ │ └── start.ts # Entry point
83
+ └── tests/
84
+ ```
85
+
86
+ ## Minimal Example
87
+
88
+ **`src/start.ts`:**
89
+ ```typescript
90
+ import { initMcpServer, McpServerData } from 'fa-mcp-sdk';
91
+ import { tools } from './tools/tools.js';
92
+ import { handleToolCall } from './tools/handle-tool-call.js';
93
+
94
+ const serverData: McpServerData = {
95
+ tools,
96
+ toolHandler: handleToolCall,
97
+ agentBrief: 'My MCP Server',
98
+ agentPrompt: 'You are a helpful assistant.',
99
+ };
100
+
101
+ await initMcpServer(serverData);
102
+ ```
103
+
104
+ **`src/tools/tools.ts`:**
105
+ ```typescript
106
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
107
+
108
+ export const tools: Tool[] = [{
109
+ name: 'hello',
110
+ description: 'Say hello',
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: { name: { type: 'string', description: 'Name to greet' } },
114
+ required: ['name']
115
+ }
116
+ }];
117
+ ```
118
+
119
+ **`src/tools/handle-tool-call.ts`:**
120
+ ```typescript
121
+ import { formatToolResult, ToolExecutionError } from 'fa-mcp-sdk';
122
+
123
+ export const handleToolCall = async (params: { name: string; arguments?: any }): Promise<any> => {
124
+ const { name, arguments: args } = params;
125
+ switch (name) {
126
+ case 'hello':
127
+ return formatToolResult({ message: `Hello, ${args.name}!` });
128
+ default:
129
+ throw new ToolExecutionError(name, `Unknown tool: ${name}`);
130
+ }
131
+ };
132
+ ```
@@ -1,146 +1,146 @@
1
- # Getting Started
2
-
3
- ## initMcpServer(data: McpServerData): Promise<void>
4
-
5
- Primary function for starting your MCP server.
6
-
7
- ```typescript
8
- import { initMcpServer, McpServerData, CustomAuthValidator } from 'fa-mcp-sdk';
9
- import { tools } from './tools/tools.js';
10
- import { handleToolCall } from './tools/handle-tool-call.js';
11
-
12
- const serverData: McpServerData = {
13
- tools,
14
- toolHandler: handleToolCall,
15
- agentBrief: 'My agent description',
16
- agentPrompt: 'Full agent instructions',
17
- customAuthValidator: async (req) => { /* custom auth logic */ },
18
- };
19
-
20
- await initMcpServer(serverData);
21
- ```
22
-
23
- ## Core Types
24
-
25
- ### McpServerData
26
-
27
- ```typescript
28
- interface McpServerData {
29
- tools: Tool[] | (() => Promise<Tool[]>); // Tool definitions
30
- toolHandler: (params: IToolHandlerParams) => Promise<any>;
31
- agentBrief: string; // Brief description
32
- agentPrompt: string; // System prompt
33
- customPrompts?: IPromptData[]; // Additional prompts
34
- usedHttpHeaders?: IUsedHttpHeader[] | null; // HTTP headers for auth
35
- customResources?: IResourceData[] | null; // Custom resources
36
- customAuthValidator?: CustomAuthValidator; // Runs FIRST: bypass or fallback to standard auth
37
- tokenGenAuthHandler?: TokenGenAuthHandler; // Token Generator auth
38
- httpComponents?: { apiRouter?: Router | null }; // Express router
39
- assets?: { logoSvg?: string };
40
- getConsulUIAddress?: (serviceId: string) => string;
41
- }
42
-
43
- interface IToolHandlerParams {
44
- name: string;
45
- arguments?: any;
46
- headers?: Record<string, string>;
47
- payload?: { user: string; [key: string]: any }; // JWT payload if authenticated
48
- transport?: 'stdio' | 'sse' | 'http';
49
- }
50
- ```
51
-
52
- ### IPromptData
53
-
54
- For custom prompts in `src/prompts/custom-prompts.ts`:
55
-
56
- ```typescript
57
- interface IPromptData {
58
- name: string;
59
- description: string;
60
- arguments: [];
61
- content: string | ((request: IGetPromptRequest) => string | Promise<string>);
62
- requireAuth?: boolean;
63
- }
64
-
65
- // Example:
66
- export const customPrompts: IPromptData[] = [{
67
- name: 'custom_prompt',
68
- description: 'A custom prompt',
69
- arguments: [],
70
- content: (request) => `Content with param: ${request.params.arguments?.sample}`,
71
- }];
72
- ```
73
-
74
- ### IResourceData
75
-
76
- For custom resources in `src/custom-resources.ts`:
77
-
78
- ```typescript
79
- interface IResourceData {
80
- uri: string; // e.g., "custom-resource://data1"
81
- name: string;
82
- title?: string;
83
- description: string;
84
- mimeType: string; // e.g., "text/plain", "application/json"
85
- content: string | object | ((uri: string) => string | Promise<string>);
86
- requireAuth?: boolean;
87
- }
88
-
89
- // Example:
90
- export const customResources: IResourceData[] = [{
91
- uri: 'custom-resource://resource1',
92
- name: 'resource1',
93
- description: 'Dynamic content example',
94
- mimeType: 'text/plain',
95
- content: (uri) => `Dynamic content for ${uri}`,
96
- }];
97
- ```
98
-
99
- ## Configuration API
100
-
101
- ### appConfig
102
-
103
- Singleton with merged configuration from YAML files and environment variables:
104
-
105
- ```typescript
106
- import { appConfig, AppConfig } from 'fa-mcp-sdk';
107
-
108
- const port = appConfig.webServer.port;
109
- const serviceName = appConfig.name;
110
- const isAuthEnabled = appConfig.webServer.auth.enabled;
111
-
112
- // Nested config access
113
- const dbHost = appConfig.db.postgres.dbs.main.host;
114
- const rateLimit = appConfig.mcp.rateLimit.maxRequests;
115
- const dbEnabled = appConfig.isMainDBUsed;
116
- ```
117
-
118
- | Property | Description |
119
- |----------|-------------|
120
- | `name` | Package name from package.json |
121
- | `shortName` | Name without 'mcp' suffix |
122
- | `version` | Package version |
123
- | `webServer` | HTTP server config (host, port, auth) |
124
- | `mcp` | MCP settings (transportType, rateLimit, tools.answerAs, tools.hideAnnotations) |
125
- | `logger` | Logging config |
126
- | `ad` | Active Directory config |
127
- | `consul` | Service discovery settings |
128
- | `homePage` | Home page footer settings (help link) |
129
-
130
- ### getProjectData(): McpServerData
131
-
132
- Returns the data passed to `initMcpServer()`.
133
-
134
- ```typescript
135
- const projectData = getProjectData();
136
- console.log(projectData.agentBrief, projectData.tools.length);
137
- ```
138
-
139
- ### getSafeAppConfig(): any
140
-
141
- Returns config clone with sensitive data masked. Use for logging:
142
-
143
- ```typescript
144
- const safeConfig = getSafeAppConfig();
145
- console.log(JSON.stringify(safeConfig, null, 2)); // passwords masked
146
- ```
1
+ # Getting Started
2
+
3
+ ## initMcpServer(data: McpServerData): Promise<void>
4
+
5
+ Primary function for starting your MCP server.
6
+
7
+ ```typescript
8
+ import { initMcpServer, McpServerData, CustomAuthValidator } from 'fa-mcp-sdk';
9
+ import { tools } from './tools/tools.js';
10
+ import { handleToolCall } from './tools/handle-tool-call.js';
11
+
12
+ const serverData: McpServerData = {
13
+ tools,
14
+ toolHandler: handleToolCall,
15
+ agentBrief: 'My agent description',
16
+ agentPrompt: 'Full agent instructions',
17
+ customAuthValidator: async (req) => { /* custom auth logic */ },
18
+ };
19
+
20
+ await initMcpServer(serverData);
21
+ ```
22
+
23
+ ## Core Types
24
+
25
+ ### McpServerData
26
+
27
+ ```typescript
28
+ interface McpServerData {
29
+ tools: Tool[] | (() => Promise<Tool[]>); // Tool definitions
30
+ toolHandler: (params: IToolHandlerParams) => Promise<any>;
31
+ agentBrief: string; // Brief description
32
+ agentPrompt: string; // System prompt
33
+ customPrompts?: IPromptData[]; // Additional prompts
34
+ usedHttpHeaders?: IUsedHttpHeader[] | null; // HTTP headers for auth
35
+ customResources?: IResourceData[] | null; // Custom resources
36
+ customAuthValidator?: CustomAuthValidator; // Runs FIRST: bypass or fallback to standard auth
37
+ tokenGenAuthHandler?: TokenGenAuthHandler; // Token Generator auth
38
+ httpComponents?: { apiRouter?: Router | null }; // Express router
39
+ assets?: { logoSvg?: string };
40
+ getConsulUIAddress?: (serviceId: string) => string;
41
+ }
42
+
43
+ interface IToolHandlerParams {
44
+ name: string;
45
+ arguments?: any;
46
+ headers?: Record<string, string>;
47
+ payload?: { user: string; [key: string]: any }; // JWT payload if authenticated
48
+ transport?: 'stdio' | 'sse' | 'http';
49
+ }
50
+ ```
51
+
52
+ ### IPromptData
53
+
54
+ For custom prompts in `src/prompts/custom-prompts.ts`:
55
+
56
+ ```typescript
57
+ interface IPromptData {
58
+ name: string;
59
+ description: string;
60
+ arguments: [];
61
+ content: string | ((request: IGetPromptRequest) => string | Promise<string>);
62
+ requireAuth?: boolean;
63
+ }
64
+
65
+ // Example:
66
+ export const customPrompts: IPromptData[] = [{
67
+ name: 'custom_prompt',
68
+ description: 'A custom prompt',
69
+ arguments: [],
70
+ content: (request) => `Content with param: ${request.params.arguments?.sample}`,
71
+ }];
72
+ ```
73
+
74
+ ### IResourceData
75
+
76
+ For custom resources in `src/custom-resources.ts`:
77
+
78
+ ```typescript
79
+ interface IResourceData {
80
+ uri: string; // e.g., "custom-resource://data1"
81
+ name: string;
82
+ title?: string;
83
+ description: string;
84
+ mimeType: string; // e.g., "text/plain", "application/json"
85
+ content: string | object | ((uri: string) => string | Promise<string>);
86
+ requireAuth?: boolean;
87
+ }
88
+
89
+ // Example:
90
+ export const customResources: IResourceData[] = [{
91
+ uri: 'custom-resource://resource1',
92
+ name: 'resource1',
93
+ description: 'Dynamic content example',
94
+ mimeType: 'text/plain',
95
+ content: (uri) => `Dynamic content for ${uri}`,
96
+ }];
97
+ ```
98
+
99
+ ## Configuration API
100
+
101
+ ### appConfig
102
+
103
+ Singleton with merged configuration from YAML files and environment variables:
104
+
105
+ ```typescript
106
+ import { appConfig, AppConfig } from 'fa-mcp-sdk';
107
+
108
+ const port = appConfig.webServer.port;
109
+ const serviceName = appConfig.name;
110
+ const isAuthEnabled = appConfig.webServer.auth.enabled;
111
+
112
+ // Nested config access
113
+ const dbHost = appConfig.db.postgres.dbs.main.host;
114
+ const rateLimit = appConfig.mcp.rateLimit.maxRequests;
115
+ const dbEnabled = appConfig.isMainDBUsed;
116
+ ```
117
+
118
+ | Property | Description |
119
+ |----------|-------------|
120
+ | `name` | Package name from package.json |
121
+ | `shortName` | Name without 'mcp' suffix |
122
+ | `version` | Package version |
123
+ | `webServer` | HTTP server config (host, port, auth) |
124
+ | `mcp` | MCP settings (transportType, rateLimit, tools.answerAs, tools.hideAnnotations) |
125
+ | `logger` | Logging config |
126
+ | `ad` | Active Directory config |
127
+ | `consul` | Service discovery settings |
128
+ | `homePage` | Home page footer settings (help link) |
129
+
130
+ ### getProjectData(): McpServerData
131
+
132
+ Returns the data passed to `initMcpServer()`.
133
+
134
+ ```typescript
135
+ const projectData = getProjectData();
136
+ console.log(projectData.agentBrief, projectData.tools.length);
137
+ ```
138
+
139
+ ### getSafeAppConfig(): any
140
+
141
+ Returns config clone with sensitive data masked. Use for logging:
142
+
143
+ ```typescript
144
+ const safeConfig = getSafeAppConfig();
145
+ console.log(JSON.stringify(safeConfig, null, 2)); // passwords masked
146
+ ```