@esaio/esa-mcp-server 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.
Files changed (80) hide show
  1. package/.claude/settings.local.json +23 -0
  2. package/.dockerignore +36 -0
  3. package/.envrc +2 -0
  4. package/.github/dependabot.yml +18 -0
  5. package/.github/workflows/docker-publish.yml +120 -0
  6. package/.github/workflows/main.yml +41 -0
  7. package/.node-version +1 -0
  8. package/CLAUDE.md +94 -0
  9. package/Dockerfile +34 -0
  10. package/LICENSE +7 -0
  11. package/README.en.md +139 -0
  12. package/README.md +139 -0
  13. package/bin/index.js +30 -0
  14. package/biome.json +57 -0
  15. package/package.json +48 -0
  16. package/src/__tests__/fixtures/mock-comment.ts +90 -0
  17. package/src/__tests__/fixtures/mock-post.ts +79 -0
  18. package/src/__tests__/index.test.ts +209 -0
  19. package/src/api_client/__tests__/index.test.ts +149 -0
  20. package/src/api_client/__tests__/middleware.test.ts +119 -0
  21. package/src/api_client/__tests__/with-context.test.ts +98 -0
  22. package/src/api_client/index.ts +29 -0
  23. package/src/api_client/middleware.ts +21 -0
  24. package/src/api_client/with-context.ts +26 -0
  25. package/src/config/__tests__/index.test.ts +65 -0
  26. package/src/config/index.ts +20 -0
  27. package/src/context/mcp-context.ts +1 -0
  28. package/src/context/stdio-context.ts +6 -0
  29. package/src/errors/missing-team-name-error.ts +8 -0
  30. package/src/formatters/__tests__/mcp-response.test.ts +106 -0
  31. package/src/formatters/mcp-response.ts +95 -0
  32. package/src/generated/api-types.ts +2691 -0
  33. package/src/i18n/__tests__/index.test.ts +53 -0
  34. package/src/i18n/index.ts +39 -0
  35. package/src/index.ts +47 -0
  36. package/src/locales/en.json +13 -0
  37. package/src/locales/ja.json +13 -0
  38. package/src/prompts/__tests__/index.test.ts +47 -0
  39. package/src/prompts/__tests__/summarize-post.test.ts +291 -0
  40. package/src/prompts/index.ts +21 -0
  41. package/src/prompts/summarize-post.ts +94 -0
  42. package/src/resources/__tests__/index.test.ts +49 -0
  43. package/src/resources/__tests__/recent-posts-list.test.ts +91 -0
  44. package/src/resources/__tests__/recent-posts.test.ts +270 -0
  45. package/src/resources/index.ts +33 -0
  46. package/src/resources/recent-posts-list.ts +22 -0
  47. package/src/resources/recent-posts.ts +45 -0
  48. package/src/schemas/team-name-schema.ts +19 -0
  49. package/src/tools/__tests__/categories.test.ts +226 -0
  50. package/src/tools/__tests__/comments.test.ts +970 -0
  51. package/src/tools/__tests__/helps.test.ts +222 -0
  52. package/src/tools/__tests__/index.test.ts +47 -0
  53. package/src/tools/__tests__/post-actions.test.ts +445 -0
  54. package/src/tools/__tests__/posts.test.ts +917 -0
  55. package/src/tools/__tests__/search.test.ts +339 -0
  56. package/src/tools/__tests__/teams.test.ts +615 -0
  57. package/src/tools/categories.ts +93 -0
  58. package/src/tools/comments.ts +258 -0
  59. package/src/tools/helps.ts +50 -0
  60. package/src/tools/index.ts +324 -0
  61. package/src/tools/post-actions.ts +132 -0
  62. package/src/tools/posts.ts +179 -0
  63. package/src/tools/search.ts +98 -0
  64. package/src/tools/teams.ts +157 -0
  65. package/src/transformers/__tests__/category-transformer.test.ts +161 -0
  66. package/src/transformers/__tests__/comment-transformer.test.ts +129 -0
  67. package/src/transformers/__tests__/post-name-normalizer.test.ts +53 -0
  68. package/src/transformers/__tests__/post-transformer.test.ts +70 -0
  69. package/src/transformers/__tests__/query-normalizer.test.ts +98 -0
  70. package/src/transformers/__tests__/team-name-normalizer.test.ts +21 -0
  71. package/src/transformers/category-transformer.ts +36 -0
  72. package/src/transformers/comment-transformer.ts +34 -0
  73. package/src/transformers/post-name-normalizer.ts +30 -0
  74. package/src/transformers/post-transformer.ts +38 -0
  75. package/src/transformers/query-normalizer.ts +36 -0
  76. package/src/transformers/team-name-normalizer.ts +7 -0
  77. package/tsconfig.build.json +4 -0
  78. package/tsconfig.json +30 -0
  79. package/tsdown.config.ts +13 -0
  80. package/vitest.config.ts +24 -0
@@ -0,0 +1,36 @@
1
+ export function normalizeSearchQuery(query: string): string {
2
+ let normalized = query;
3
+
4
+ // Convert wildcard "*" to empty string (for "all posts" queries)
5
+ if (normalized === "*") {
6
+ normalized = "";
7
+ }
8
+
9
+ // Convert common date syntax patterns from other services to esa format
10
+ // GitHub/Gmail style: after:YYYY-MM-DD -> created:>YYYY-MM-DD
11
+ normalized = normalized.replace(
12
+ /\bafter:(\d{4}-\d{2}-\d{2})\b/gi,
13
+ "created:>$1",
14
+ );
15
+
16
+ // GitHub/Gmail style: before:YYYY-MM-DD -> created:<YYYY-MM-DD
17
+ normalized = normalized.replace(
18
+ /\bbefore:(\d{4}-\d{2}-\d{2})\b/gi,
19
+ "created:<$1",
20
+ );
21
+
22
+ // Alternative patterns that might be used
23
+ // since:YYYY-MM-DD -> created:>YYYY-MM-DD
24
+ normalized = normalized.replace(
25
+ /\bsince:(\d{4}-\d{2}-\d{2})\b/gi,
26
+ "created:>$1",
27
+ );
28
+
29
+ // until:YYYY-MM-DD -> created:<YYYY-MM-DD
30
+ normalized = normalized.replace(
31
+ /\buntil:(\d{4}-\d{2}-\d{2})\b/gi,
32
+ "created:<$1",
33
+ );
34
+
35
+ return normalized;
36
+ }
@@ -0,0 +1,7 @@
1
+ export function normalizeTeamName(teamName: string): string {
2
+ const dotIndex = teamName.indexOf(".");
3
+ if (dotIndex >= 0) {
4
+ return teamName.substring(0, dotIndex);
5
+ }
6
+ return teamName;
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "exclude": ["**/__tests__/**"]
4
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "lib": ["ES2022"],
6
+ "moduleResolution": "nodenext",
7
+ "outDir": "./bin",
8
+ "rootDir": "./src",
9
+ "strict": true,
10
+ "esModuleInterop": true,
11
+ "skipLibCheck": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "resolveJsonModule": true,
14
+ "declaration": true,
15
+ "declarationMap": true,
16
+ "sourceMap": true,
17
+ "removeComments": true,
18
+ "noImplicitAny": true,
19
+ "strictNullChecks": true,
20
+ "strictFunctionTypes": true,
21
+ "noImplicitThis": true,
22
+ "noUnusedLocals": true,
23
+ "noUnusedParameters": true,
24
+ "noImplicitReturns": true,
25
+ "noFallthroughCasesInSwitch": true,
26
+ "allowSyntheticDefaultImports": true,
27
+ "isolatedModules": true
28
+ },
29
+ "include": ["src/**/*"]
30
+ }
@@ -0,0 +1,13 @@
1
+ import { defineConfig } from "tsdown";
2
+
3
+ export default defineConfig({
4
+ entry: "src/index.ts",
5
+ outDir: "bin",
6
+ format: "es",
7
+ platform: "node",
8
+ target: "node20",
9
+ clean: true,
10
+ dts: false,
11
+ tsconfig: "tsconfig.build.json",
12
+ minify: true,
13
+ });
@@ -0,0 +1,24 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: false,
6
+ environment: "node",
7
+ include: ["**/__tests__/**/*.{test,spec}.{js,ts,jsx,tsx}"],
8
+ coverage: {
9
+ provider: "v8",
10
+ reporter: ["text", "json", "html"],
11
+ exclude: [
12
+ "node_modules/",
13
+ "bin/",
14
+ "**/*.config.ts",
15
+ "**/*.config.js",
16
+ "**/context/**",
17
+ "**/generated/**",
18
+ ],
19
+ },
20
+ },
21
+ resolve: {
22
+ extensions: [".ts", ".js"],
23
+ },
24
+ });