File tree 4 files changed +78
-13
lines changed
4 files changed +78
-13
lines changed Original file line number Diff line number Diff line change @@ -23,6 +23,20 @@ This file is intended to be used by an LLM such as Claude.
23
23
git commit -am " \" fix: my commit message\" "
24
24
```
25
25
26
+ - For commits fixing bugs or adding features based on user reports add:
27
+ ``` bash
28
+ git commit --trailer " Reported-by:<name>"
29
+ ```
30
+ Where ` <name> ` is the name of the user.
31
+
32
+ - For commits related to a Github issue, add
33
+ ``` bash
34
+ git commit --trailer " Github-Issue:<number>"
35
+ ```
36
+ - NEVER ever mention a ` co-authored-by ` or similar aspects. In particular, never
37
+ mention the tool used to create the commit message or PR.
38
+
39
+
26
40
## Python Tools
27
41
28
42
### Ruff
Original file line number Diff line number Diff line change 24
24
from mcp .server .stdio import stdio_server
25
25
from mcp .shared .context import RequestContext
26
26
from mcp .types import (
27
+ BlobResourceContents ,
27
28
EmbeddedResource ,
28
29
GetPromptResult ,
29
30
ImageContent ,
31
+ ReadResourceResult ,
30
32
TextContent ,
33
+ TextResourceContents ,
31
34
)
32
35
from mcp .types import (
33
36
Prompt as MCPPrompt ,
@@ -197,14 +200,36 @@ async def list_resource_templates(self) -> list[MCPResourceTemplate]:
197
200
for template in templates
198
201
]
199
202
200
- async def read_resource (self , uri : AnyUrl | str ) -> str | bytes :
203
+ async def read_resource (
204
+ self , uri : AnyUrl | str
205
+ ) -> str | bytes | ReadResourceResult :
201
206
"""Read a resource by URI."""
207
+ import base64
208
+
202
209
resource = await self ._resource_manager .get_resource (uri )
203
210
if not resource :
204
211
raise ResourceError (f"Unknown resource: { uri } " )
205
212
206
213
try :
207
- return await resource .read ()
214
+ match await resource .read ():
215
+ case str () as s :
216
+ return ReadResourceResult (
217
+ contents = [
218
+ TextResourceContents (
219
+ uri = resource .uri , mimeType = resource .mime_type , text = s
220
+ )
221
+ ]
222
+ )
223
+ case bytes () as b :
224
+ return ReadResourceResult (
225
+ contents = [
226
+ BlobResourceContents (
227
+ uri = resource .uri ,
228
+ mimeType = resource .mime_type ,
229
+ blob = base64 .b64encode (b ).decode (),
230
+ )
231
+ ]
232
+ )
208
233
except Exception as e :
209
234
logger .error (f"Error reading resource { uri } : { e } " )
210
235
raise ResourceError (str (e ))
Original file line number Diff line number Diff line change @@ -252,32 +252,44 @@ async def handler(_: Any):
252
252
return decorator
253
253
254
254
def read_resource (self ):
255
- def decorator (func : Callable [[AnyUrl ], Awaitable [str | bytes ]]):
255
+ def decorator (
256
+ func : Callable [[AnyUrl ], Awaitable [types .ReadResourceResult | str | bytes ]],
257
+ ):
256
258
logger .debug ("Registering handler for ReadResourceRequest" )
257
259
258
260
async def handler (req : types .ReadResourceRequest ):
259
261
result = await func (req .params .uri )
260
262
match result :
261
- case str (s ):
263
+ case types .ReadResourceResult () as result :
264
+ return types .ServerResult (result )
265
+ case str () as s :
262
266
content = types .TextResourceContents (
263
267
uri = req .params .uri ,
264
268
text = s ,
265
269
mimeType = "text/plain" ,
266
270
)
267
- case bytes (b ):
271
+ return types .ServerResult (
272
+ types .ReadResourceResult (
273
+ contents = [content ],
274
+ )
275
+ )
276
+ case bytes () as b :
268
277
import base64
269
278
270
279
content = types .BlobResourceContents (
271
280
uri = req .params .uri ,
272
281
blob = base64 .urlsafe_b64encode (b ).decode (),
273
282
mimeType = "application/octet-stream" ,
274
283
)
275
-
276
- return types .ServerResult (
277
- types .ReadResourceResult (
278
- contents = [content ],
279
- )
280
- )
284
+ return types .ServerResult (
285
+ types .ReadResourceResult (
286
+ contents = [content ],
287
+ )
288
+ )
289
+ case _:
290
+ raise ValueError (
291
+ f"Unexpected return type from read_resource: { type (result )} "
292
+ )
281
293
282
294
self .request_handlers [types .ReadResourceRequest ] = handler
283
295
return func
Original file line number Diff line number Diff line change @@ -98,9 +98,23 @@ async def handle_list_resources():
98
98
@server .read_resource ()
99
99
async def handle_read_resource (uri : AnyUrl ):
100
100
if str (uri ) == "test://image" :
101
- return base64_string
101
+ return types .ReadResourceResult (
102
+ contents = [
103
+ types .TextResourceContents (
104
+ uri = uri , mimeType = "image/png" , text = base64_string
105
+ )
106
+ ]
107
+ )
102
108
elif str (uri ) == "test://image_bytes" :
103
- return image_bytes
109
+ return types .ReadResourceResult (
110
+ contents = [
111
+ types .BlobResourceContents (
112
+ uri = uri ,
113
+ mimeType = "image/png" ,
114
+ blob = base64 .b64encode (image_bytes ).decode (),
115
+ )
116
+ ]
117
+ )
104
118
raise Exception (f"Resource not found: { uri } " )
105
119
106
120
# Test that resources are listed with correct mime type
You can’t perform that action at this time.
0 commit comments