forked from modelcontextprotocol/python-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathauthorizer.py
More file actions
153 lines (126 loc) · 5.03 KB
/
authorizer.py
File metadata and controls
153 lines (126 loc) · 5.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
from __future__ import annotations
import abc
from typing import TYPE_CHECKING, Any
from pydantic import AnyUrl
from starlette.requests import Request
from mcp.server.lowlevel.server import LifespanResultT
from mcp.server.session import ServerSession
if TYPE_CHECKING:
from mcp.server.fastmcp.server import Context
class Authorizer:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def permit_get_tool(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified tool can be retrieved from the associated mcp server"""
return False
@abc.abstractmethod
def permit_list_tool(
self,
name: str,
context: Context[ServerSession, LifespanResultT, Request] | None = None,
) -> bool:
"""Check if the specified tool can be listed from the associated mcp server"""
return False
@abc.abstractmethod
def permit_call_tool(
self,
name: str,
arguments: dict[str, Any],
context: Context[ServerSession, LifespanResultT, Request] | None = None,
) -> bool:
"""Check if the specified tool can be called from the associated mcp server"""
return False
@abc.abstractmethod
def permit_get_resource(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified resource can be retrieved from the associated mcp server"""
return False
@abc.abstractmethod
def permit_create_resource(
self, uri: str, params: dict[str, Any], context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified resource can be created on the associated mcp server"""
return False
@abc.abstractmethod
def permit_list_resource(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified resource can be listed from the associated mcp server"""
return False
@abc.abstractmethod
def permit_list_template(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified template can be listed from the associated mcp server"""
return False
@abc.abstractmethod
def permit_get_prompt(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified prompt can be retrieved from the associated mcp server"""
return False
@abc.abstractmethod
def permit_list_prompt(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
"""Check if the specified prompt can be listed from the associated mcp server"""
return False
@abc.abstractmethod
def permit_render_prompt(
self,
name: str,
arguments: dict[str, Any] | None = None,
context: Context[ServerSession, object, Request] | None = None,
) -> bool:
"""Check if the specified prompt can be rendered from the associated mcp server"""
return False
class AllowAllAuthorizer(Authorizer):
def permit_get_tool(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_list_tool(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_call_tool(
self,
name: str,
arguments: dict[str, Any],
context: Context[ServerSession, LifespanResultT, Request] | None = None,
) -> bool:
return True
def permit_get_resource(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_create_resource(
self, uri: str, params: dict[str, Any], context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_list_resource(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_list_template(
self, resource: AnyUrl | str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_get_prompt(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_list_prompt(
self, name: str, context: Context[ServerSession, LifespanResultT, Request] | None = None
) -> bool:
return True
def permit_render_prompt(
self,
name: str,
arguments: dict[str, Any] | None = None,
context: Context[ServerSession, object, Request] | None = None,
) -> bool:
return True