@findtime/mcp-server 3.25.15 → 3.25.16
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/README.md +14 -6
- package/examples/claude-desktop-config.json +5 -4
- package/examples/cline-mcp.json +5 -4
- package/examples/codex-mcp.json +5 -4
- package/examples/cursor-mcp.json +5 -4
- package/examples/windsurf-mcp.json +5 -4
- package/package.json +1 -8
- package/server.js +31 -6
package/README.md
CHANGED
|
@@ -124,15 +124,16 @@ Best meeting time between New York, Sydney, and Mumbai?
|
|
|
124
124
|
|
|
125
125
|
## Local development
|
|
126
126
|
|
|
127
|
-
Run the
|
|
127
|
+
Run the workspace version directly:
|
|
128
128
|
|
|
129
129
|
```bash
|
|
130
|
-
npm start
|
|
130
|
+
npm run mcp:start
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
The server attempts to load `.env.development.local`, `.env.development`, `.env.local`, and `.env` from:
|
|
134
134
|
|
|
135
135
|
- the current working directory
|
|
136
|
+
- `services/mcp-server`
|
|
136
137
|
- the repo root
|
|
137
138
|
|
|
138
139
|
## Tests
|
|
@@ -140,13 +141,13 @@ The server attempts to load `.env.development.local`, `.env.development`, `.env.
|
|
|
140
141
|
Protocol and transport tests:
|
|
141
142
|
|
|
142
143
|
```bash
|
|
143
|
-
npm test
|
|
144
|
+
npm run test:mcp-server
|
|
144
145
|
```
|
|
145
146
|
|
|
146
147
|
Live production-parity smoke tests:
|
|
147
148
|
|
|
148
149
|
```bash
|
|
149
|
-
npm run test:smoke
|
|
150
|
+
npm run test:mcp-server:smoke
|
|
150
151
|
```
|
|
151
152
|
|
|
152
153
|
The smoke suite checks:
|
|
@@ -168,7 +169,7 @@ The canonical public source for this package now lives in:
|
|
|
168
169
|
- npm: `@findtime/mcp-server`
|
|
169
170
|
- Official MCP Registry: `https://registry.modelcontextprotocol.io/?q=io.github.hkchao%2Ffindtime-mcp-server`
|
|
170
171
|
|
|
171
|
-
Publish and version updates should happen from
|
|
172
|
+
Publish and version updates should happen from that public repo, not from this private app repo.
|
|
172
173
|
|
|
173
174
|
Standard publish flow in the public repo:
|
|
174
175
|
|
|
@@ -178,4 +179,11 @@ npm pack --dry-run
|
|
|
178
179
|
npm publish --access public
|
|
179
180
|
```
|
|
180
181
|
|
|
181
|
-
|
|
182
|
+
The equivalent local verification checks in this repo are:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npm run test:mcp-server
|
|
186
|
+
npm run mcp:pack
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Treat this repo as the implementation source that originally produced the MCP package, not as the canonical public release source.
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"findtime": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": [
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": [
|
|
7
|
+
"/absolute/path/to/findtime-io-mcp/services/mcp-server/src/server.js"
|
|
8
|
+
],
|
|
7
9
|
"env": {
|
|
8
10
|
"FINDTIME_MCP_CLIENT_TYPE": "claude-desktop",
|
|
9
|
-
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
10
|
-
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
|
|
11
|
+
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
package/examples/cline-mcp.json
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"findtime": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": [
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": [
|
|
7
|
+
"/absolute/path/to/findtime-io-mcp/services/mcp-server/src/server.js"
|
|
8
|
+
],
|
|
7
9
|
"env": {
|
|
8
10
|
"FINDTIME_MCP_CLIENT_TYPE": "cline",
|
|
9
|
-
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
10
|
-
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
|
|
11
|
+
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
package/examples/codex-mcp.json
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"findtime": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": [
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": [
|
|
7
|
+
"/absolute/path/to/findtime-io-mcp/services/mcp-server/src/server.js"
|
|
8
|
+
],
|
|
7
9
|
"env": {
|
|
8
10
|
"FINDTIME_MCP_CLIENT_TYPE": "codex",
|
|
9
|
-
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
10
|
-
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
|
|
11
|
+
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
package/examples/cursor-mcp.json
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"findtime": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": [
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": [
|
|
7
|
+
"/absolute/path/to/findtime-io-mcp/services/mcp-server/src/server.js"
|
|
8
|
+
],
|
|
7
9
|
"env": {
|
|
8
10
|
"FINDTIME_MCP_CLIENT_TYPE": "cursor",
|
|
9
|
-
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
10
|
-
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
|
|
11
|
+
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"findtime": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
6
|
-
"args": [
|
|
5
|
+
"command": "node",
|
|
6
|
+
"args": [
|
|
7
|
+
"/absolute/path/to/findtime-io-mcp/services/mcp-server/src/server.js"
|
|
8
|
+
],
|
|
7
9
|
"env": {
|
|
8
10
|
"FINDTIME_MCP_CLIENT_TYPE": "windsurf",
|
|
9
|
-
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
10
|
-
"FINDTIME_TIME_API_KEY": "YOUR_FINDTIME_SECRET_KEY"
|
|
11
|
+
"FINDTIME_TIME_API_BASE_URL": "https://time-api.findtime.io"
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@findtime/mcp-server",
|
|
3
|
-
"version": "3.25.
|
|
3
|
+
"version": "3.25.16",
|
|
4
4
|
"mcpName": "io.github.hkchao/findtime-mcp-server",
|
|
5
5
|
"description": "Production-parity MCP server for the findtime.io Time API",
|
|
6
6
|
"bin": {
|
|
@@ -31,14 +31,7 @@
|
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"access": "public"
|
|
33
33
|
},
|
|
34
|
-
"repository": {
|
|
35
|
-
"type": "git",
|
|
36
|
-
"url": "git+https://github.com/hkchao/findtime-mcp-server.git"
|
|
37
|
-
},
|
|
38
34
|
"homepage": "https://findtime.io/developers/mcp/",
|
|
39
|
-
"bugs": {
|
|
40
|
-
"url": "https://github.com/hkchao/findtime-mcp-server/issues"
|
|
41
|
-
},
|
|
42
35
|
"keywords": [
|
|
43
36
|
"mcp",
|
|
44
37
|
"model-context-protocol",
|
package/server.js
CHANGED
|
@@ -442,14 +442,24 @@ function buildFindtimeHelpPayload() {
|
|
|
442
442
|
},
|
|
443
443
|
{
|
|
444
444
|
intent: 'timezone_lookup',
|
|
445
|
-
example: 'What
|
|
446
|
-
notes: '
|
|
445
|
+
example: 'What timezone is Auckland in?',
|
|
446
|
+
notes: 'Returns the canonical IANA timezone plus the current abbreviation.'
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
intent: 'timezone_abbreviation_lookup',
|
|
450
|
+
example: 'What timezone abbreviation is Auckland?',
|
|
451
|
+
notes: 'Returns the current abbreviation plus the canonical IANA timezone.'
|
|
447
452
|
},
|
|
448
453
|
{
|
|
449
454
|
intent: 'time_conversion',
|
|
450
|
-
example: '
|
|
455
|
+
example: 'If it is 3:30pm in London, what time is it in Sydney?',
|
|
451
456
|
notes: 'Include local dates because conversions often cross calendar days.'
|
|
452
457
|
},
|
|
458
|
+
{
|
|
459
|
+
intent: 'time_conversion',
|
|
460
|
+
example: 'What is 5pm San Francisco time in Tokyo?',
|
|
461
|
+
notes: 'Natural-language conversion works for common city and timezone phrasing.'
|
|
462
|
+
},
|
|
453
463
|
{
|
|
454
464
|
intent: 'dst_status',
|
|
455
465
|
example: 'Is Mexico City on DST?',
|
|
@@ -462,7 +472,7 @@ function buildFindtimeHelpPayload() {
|
|
|
462
472
|
},
|
|
463
473
|
{
|
|
464
474
|
intent: 'meeting_time_search',
|
|
465
|
-
example: 'Find a good
|
|
475
|
+
example: 'Find a good meeting time for San Francisco, Berlin, and Sydney.',
|
|
466
476
|
notes: 'Returns ranked meeting windows and tradeoffs across participants.'
|
|
467
477
|
},
|
|
468
478
|
{
|
|
@@ -506,6 +516,20 @@ function buildFindtimeHelpPayload() {
|
|
|
506
516
|
};
|
|
507
517
|
}
|
|
508
518
|
|
|
519
|
+
function formatFindtimeHelpText(help) {
|
|
520
|
+
const lines = [
|
|
521
|
+
'findtime.io Time Help',
|
|
522
|
+
'',
|
|
523
|
+
'Try asking:',
|
|
524
|
+
...help.intents.map((entry) => `- ${entry.example}`),
|
|
525
|
+
'',
|
|
526
|
+
'If a place or timezone is ambiguous, findtime.io will ask for clarification. For example:',
|
|
527
|
+
...help.ambiguityExamples.map((entry) => `- ${entry.query} -> ${entry.expectedBehavior}`),
|
|
528
|
+
];
|
|
529
|
+
|
|
530
|
+
return lines.join('\n');
|
|
531
|
+
}
|
|
532
|
+
|
|
509
533
|
function safeReadJson(filePath) {
|
|
510
534
|
try {
|
|
511
535
|
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
@@ -1199,14 +1223,15 @@ function createFindtimeMcpServer(options = {}) {
|
|
|
1199
1223
|
}
|
|
1200
1224
|
|
|
1201
1225
|
if (name === 'get_findtime_help') {
|
|
1226
|
+
const help = buildFindtimeHelpPayload();
|
|
1202
1227
|
return {
|
|
1203
1228
|
content: [
|
|
1204
1229
|
{
|
|
1205
1230
|
type: 'text',
|
|
1206
|
-
text:
|
|
1231
|
+
text: formatFindtimeHelpText(help)
|
|
1207
1232
|
}
|
|
1208
1233
|
],
|
|
1209
|
-
structuredContent:
|
|
1234
|
+
structuredContent: help
|
|
1210
1235
|
};
|
|
1211
1236
|
}
|
|
1212
1237
|
|