Skip to content

Commit 9ed03c6

Browse files
committed
Improve pub.dev point
1 parent a365a8a commit 9ed03c6

File tree

13 files changed

+659
-722
lines changed

13 files changed

+659
-722
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
## Unreleased
1+
## 0.3.6
2+
3+
- Improve pub.dev points
24

35
## 0.3.5
46

example/weather.dart

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ void main() async {
8383
);
8484
}
8585

86-
final formattedAlerts = features
87-
.map((feature) => formatAlert(feature))
88-
.join("\n");
86+
final formattedAlerts =
87+
features.map((feature) => formatAlert(feature)).join("\n");
8988
final alertsText = "Active alerts for $state:\n\n$formattedAlerts";
9089

9190
return CallToolResult(content: [TextContent(text: alertsText)]);
@@ -155,18 +154,16 @@ void main() async {
155154
);
156155
}
157156

158-
final formattedForecast = periods
159-
.map((period) {
160-
final periodMap = period as Map<String, dynamic>;
161-
return [
162-
"${periodMap['name'] ?? 'Unknown'}:",
163-
"Temperature: ${periodMap['temperature'] ?? 'Unknown'}°${periodMap['temperatureUnit'] ?? 'F'}",
164-
"Wind: ${periodMap['windSpeed'] ?? 'Unknown'} ${periodMap['windDirection'] ?? ''}",
165-
"${periodMap['shortForecast'] ?? 'No forecast available'}",
166-
"---",
167-
].join("\n");
168-
})
169-
.join("\n");
157+
final formattedForecast = periods.map((period) {
158+
final periodMap = period as Map<String, dynamic>;
159+
return [
160+
"${periodMap['name'] ?? 'Unknown'}:",
161+
"Temperature: ${periodMap['temperature'] ?? 'Unknown'}°${periodMap['temperatureUnit'] ?? 'F'}",
162+
"Wind: ${periodMap['windSpeed'] ?? 'Unknown'} ${periodMap['windDirection'] ?? ''}",
163+
"${periodMap['shortForecast'] ?? 'No forecast available'}",
164+
"---",
165+
].join("\n");
166+
}).join("\n");
170167

171168
final forecastText =
172169
"Forecast for $latitude, $longitude:\n\n$formattedForecast";

lib/src/client/client.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Client extends Protocol {
2828
/// - [clientInfo]: Information about this client's name and version.
2929
/// - [options]: Optional configuration settings including client capabilities.
3030
Client(this._clientInfo, {ClientOptions? options})
31-
: _capabilities = options?.capabilities ?? const ClientCapabilities(),
32-
super(options);
31+
: _capabilities = options?.capabilities ?? const ClientCapabilities(),
32+
super(options);
3333

3434
/// Registers new capabilities for this client.
3535
///

lib/src/client/stdio.dart

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class StdioClientTransport implements Transport {
7373
/// Subscriptions to the process's stdout and stderr streams.
7474
StreamSubscription<List<int>>? _stdoutSubscription;
7575
StreamSubscription<List<int>>?
76-
_stderrSubscription; // Only used if stderrMode is pipe
76+
_stderrSubscription; // Only used if stderrMode is pipe
7777

7878
/// Callback for when the connection (process) is closed.
7979
@override
@@ -111,12 +111,9 @@ class StdioClientTransport implements Transport {
111111
}
112112
_started = true;
113113

114-
final mode =
115-
(_serverParams.stderrMode == io.ProcessStartMode.normal)
116-
? io
117-
.ProcessStartMode
118-
.normal // Use normal for pipe access
119-
: io.ProcessStartMode.inheritStdio; // More direct inheritance
114+
final mode = (_serverParams.stderrMode == io.ProcessStartMode.normal)
115+
? io.ProcessStartMode.normal // Use normal for pipe access
116+
: io.ProcessStartMode.inheritStdio; // More direct inheritance
120117

121118
try {
122119
// Start the process.
@@ -204,10 +201,9 @@ class StdioClientTransport implements Transport {
204201

205202
/// Internal handler for errors on process stdout/stderr streams.
206203
void _onStreamError(dynamic error, StackTrace stackTrace) {
207-
final Error streamError =
208-
(error is Error)
209-
? error
210-
: StateError("Process stream error: $error\n$stackTrace");
204+
final Error streamError = (error is Error)
205+
? error
206+
: StateError("Process stream error: $error\n$stackTrace");
211207
try {
212208
onerror?.call(streamError);
213209
} catch (e) {
@@ -230,10 +226,9 @@ class StdioClientTransport implements Transport {
230226
onerror?.call(StateError("Error in onmessage handler: $e"));
231227
}
232228
} catch (error) {
233-
final Error parseError =
234-
(error is Error)
235-
? error
236-
: StateError("Message parsing error: $error");
229+
final Error parseError = (error is Error)
230+
? error
231+
: StateError("Message parsing error: $error");
237232
try {
238233
onerror?.call(parseError);
239234
} catch (e) {
@@ -262,10 +257,9 @@ class StdioClientTransport implements Transport {
262257
/// Internal handler for errors retrieving the process exit code.
263258
void _onProcessExitError(dynamic error, StackTrace stackTrace) {
264259
print("StdioClientTransport: Error waiting for process exit: $error");
265-
final Error exitError =
266-
(error is Error)
267-
? error
268-
: StateError("Process exit error: $error\n$stackTrace");
260+
final Error exitError = (error is Error)
261+
? error
262+
: StateError("Process exit error: $error\n$stackTrace");
269263
try {
270264
onerror?.call(exitError);
271265
} catch (e) {
@@ -368,10 +362,9 @@ class StdioClientTransport implements Transport {
368362
await currentProcess.stdin.flush();
369363
} catch (error, stackTrace) {
370364
print("StdioClientTransport: Error writing to process stdin: $error");
371-
final Error sendError =
372-
(error is Error)
373-
? error
374-
: StateError("Process stdin write error: $error\n$stackTrace");
365+
final Error sendError = (error is Error)
366+
? error
367+
: StateError("Process stdin write error: $error\n$stackTrace");
375368
try {
376369
onerror?.call(sendError);
377370
} catch (e) {

lib/src/server/mcp.dart

Lines changed: 77 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,15 @@ class CompletableField {
1919
const CompletableField({required this.def, this.underlyingType = String});
2020
}
2121

22-
typedef ToolCallback =
23-
FutureOr<CallToolResult> Function({
24-
Map<String, dynamic>? args,
25-
RequestHandlerExtra? extra,
26-
});
22+
typedef ToolCallback = FutureOr<CallToolResult> Function({
23+
Map<String, dynamic>? args,
24+
RequestHandlerExtra? extra,
25+
});
2726

28-
typedef PromptCallback =
29-
FutureOr<GetPromptResult> Function(
30-
Map<String, dynamic>? args,
31-
RequestHandlerExtra? extra,
32-
);
27+
typedef PromptCallback = FutureOr<GetPromptResult> Function(
28+
Map<String, dynamic>? args,
29+
RequestHandlerExtra? extra,
30+
);
3331

3432
class PromptArgumentDefinition {
3533
final String? description;
@@ -45,28 +43,26 @@ class PromptArgumentDefinition {
4543
});
4644
}
4745

48-
typedef ResourceMetadata =
49-
({
50-
String? description,
51-
String? mimeType,
52-
Map<String, dynamic> additionalProperties,
53-
});
46+
typedef ResourceMetadata = ({
47+
String? description,
48+
String? mimeType,
49+
Map<String, dynamic> additionalProperties,
50+
});
5451

55-
typedef ListResourcesCallback =
56-
FutureOr<ListResourcesResult> Function(RequestHandlerExtra extra);
52+
typedef ListResourcesCallback = FutureOr<ListResourcesResult> Function(
53+
RequestHandlerExtra extra);
5754

58-
typedef ReadResourceCallback =
59-
FutureOr<ReadResourceResult> Function(Uri uri, RequestHandlerExtra extra);
55+
typedef ReadResourceCallback = FutureOr<ReadResourceResult> Function(
56+
Uri uri, RequestHandlerExtra extra);
6057

61-
typedef ReadResourceTemplateCallback =
62-
FutureOr<ReadResourceResult> Function(
63-
Uri uri,
64-
TemplateVariables variables,
65-
RequestHandlerExtra extra,
66-
);
58+
typedef ReadResourceTemplateCallback = FutureOr<ReadResourceResult> Function(
59+
Uri uri,
60+
TemplateVariables variables,
61+
RequestHandlerExtra extra,
62+
);
6763

68-
typedef CompleteResourceTemplateCallback =
69-
FutureOr<List<String>> Function(String currentValue);
64+
typedef CompleteResourceTemplateCallback = FutureOr<List<String>> Function(
65+
String currentValue);
7066

7167
class ResourceTemplateRegistration {
7268
final UriTemplateExpander uriTemplate;
@@ -113,14 +109,13 @@ class _RegisteredPrompt<Args> {
113109
});
114110

115111
Prompt toPrompt(String name) {
116-
final promptArgs =
117-
argsSchemaDefinition?.entries.map((entry) {
118-
return PromptArgument(
119-
name: entry.key,
120-
description: entry.value.description,
121-
required: entry.value.required,
122-
);
123-
}).toList();
112+
final promptArgs = argsSchemaDefinition?.entries.map((entry) {
113+
return PromptArgument(
114+
name: entry.key,
115+
description: entry.value.description,
116+
required: entry.value.required,
117+
);
118+
}).toList();
124119
return Prompt(name: name, description: description, arguments: promptArgs);
125120
}
126121
}
@@ -264,13 +259,13 @@ class McpServer {
264259
"completion/complete",
265260
(request, extra) async => switch (request.completeParams.ref) {
266261
ResourceReference r => _handleResourceCompletion(
267-
r,
268-
request.completeParams.argument,
269-
),
262+
r,
263+
request.completeParams.argument,
264+
),
270265
PromptReference p => _handlePromptCompletion(
271-
p,
272-
request.completeParams.argument,
273-
),
266+
p,
267+
request.completeParams.argument,
268+
),
274269
},
275270
(id, params, meta) => JsonRpcCompleteRequest.fromJson({
276271
'id': id,
@@ -305,12 +300,10 @@ class McpServer {
305300
) async {
306301
final templateEntry = _registeredResourceTemplates.entries.firstWhere(
307302
(e) => e.value.resourceTemplate.uriTemplate.toString() == ref.uri,
308-
orElse:
309-
() =>
310-
throw McpError(
311-
ErrorCode.invalidParams.value,
312-
"Resource template URI '${ref.uri}' not found for completion",
313-
),
303+
orElse: () => throw McpError(
304+
ErrorCode.invalidParams.value,
305+
"Resource template URI '${ref.uri}' not found for completion",
306+
),
314307
);
315308
final completer = templateEntry.value.resourceTemplate
316309
.getCompletionCallback(argInfo.name);
@@ -337,36 +330,35 @@ class McpServer {
337330
server.setRequestHandler<JsonRpcListResourcesRequest>(
338331
"resources/list",
339332
(request, extra) async {
340-
final fixed =
341-
_registeredResources.entries
342-
.map((e) => e.value.toResource(e.key))
343-
.toList();
333+
final fixed = _registeredResources.entries
334+
.map((e) => e.value.toResource(e.key))
335+
.toList();
344336
final templateFutures = _registeredResourceTemplates.values
345337
.where((t) => t.resourceTemplate.listCallback != null)
346338
.map((t) async {
347-
try {
348-
final result = await Future.value(
349-
t.resourceTemplate.listCallback!(extra),
350-
);
351-
return result.resources
352-
.map(
353-
(r) => Resource(
354-
uri: r.uri,
355-
name: r.name,
356-
description: r.description ?? t.metadata?.description,
357-
mimeType: r.mimeType ?? t.metadata?.mimeType,
358-
additionalProperties: {
359-
...?t.metadata?.additionalProperties,
360-
...r.additionalProperties,
361-
},
362-
),
363-
)
364-
.toList();
365-
} catch (e) {
366-
print("Error listing resources for template: $e");
367-
return <Resource>[];
368-
}
369-
});
339+
try {
340+
final result = await Future.value(
341+
t.resourceTemplate.listCallback!(extra),
342+
);
343+
return result.resources
344+
.map(
345+
(r) => Resource(
346+
uri: r.uri,
347+
name: r.name,
348+
description: r.description ?? t.metadata?.description,
349+
mimeType: r.mimeType ?? t.metadata?.mimeType,
350+
additionalProperties: {
351+
...?t.metadata?.additionalProperties,
352+
...r.additionalProperties,
353+
},
354+
),
355+
)
356+
.toList();
357+
} catch (e) {
358+
print("Error listing resources for template: $e");
359+
return <Resource>[];
360+
}
361+
});
370362
final templateLists = await Future.wait(templateFutures);
371363
final templates = templateLists.expand((list) => list).toList();
372364
return ListResourcesResult(resources: [...fixed, ...templates]);
@@ -381,10 +373,9 @@ class McpServer {
381373
server.setRequestHandler<JsonRpcListResourceTemplatesRequest>(
382374
"resources/templates/list",
383375
(request, extra) async => ListResourceTemplatesResult(
384-
resourceTemplates:
385-
_registeredResourceTemplates.entries
386-
.map((e) => e.value.toResourceTemplate(e.key))
387-
.toList(),
376+
resourceTemplates: _registeredResourceTemplates.entries
377+
.map((e) => e.value.toResourceTemplate(e.key))
378+
.toList(),
388379
),
389380
(id, params, meta) => JsonRpcListResourceTemplatesRequest.fromJson({
390381
'id': id,
@@ -443,10 +434,9 @@ class McpServer {
443434
server.setRequestHandler<JsonRpcListPromptsRequest>(
444435
"prompts/list",
445436
(request, extra) async => ListPromptsResult(
446-
prompts:
447-
_registeredPrompts.entries
448-
.map((e) => e.value.toPrompt(e.key))
449-
.toList(),
437+
prompts: _registeredPrompts.entries
438+
.map((e) => e.value.toPrompt(e.key))
439+
.toList(),
450440
),
451441
(id, params, meta) => JsonRpcListPromptsRequest.fromJson({
452442
'id': id,
@@ -511,9 +501,8 @@ class McpServer {
511501
if (value == null) {
512502
if (def.required) errors.add("Missing required '$name'");
513503
} else {
514-
bool typeOk =
515-
(value.runtimeType == def.type ||
516-
(def.type == num && value is num));
504+
bool typeOk = (value.runtimeType == def.type ||
505+
(def.type == num && value is num));
517506
if (!typeOk) {
518507
errors.add(
519508
"Invalid type for '$name'. Expected ${def.type}, got ${value.runtimeType}",
@@ -617,6 +606,6 @@ class McpServer {
617606
}
618607

619608
CompleteResult _emptyCompletionResult() => CompleteResult(
620-
completion: CompletionResultData(values: [], hasMore: false),
621-
);
609+
completion: CompletionResultData(values: [], hasMore: false),
610+
);
622611
}

0 commit comments

Comments
 (0)