Skip to content

Commit 017654c

Browse files
authored
Merge pull request #7 from paywithextend/use-extend-client
refactor: extend client, org id, update params
2 parents 0352353 + 39cf424 commit 017654c

27 files changed

Lines changed: 820 additions & 461 deletions

Makefile

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,15 @@ ENV ?= stage
55

66
venv: $(VENV_NAME)/bin/activate
77

8-
$(VENV_NAME)/bin/activate: requirements.txt
8+
$(VENV_NAME)/bin/activate: pyproject.toml
99
@test -d $(VENV_NAME) || $(PYTHON) -m venv $(VENV_NAME)
10-
$(VENV_NAME)/bin/python -m pip install -r requirements.txt
10+
$(VENV_NAME)/bin/python -m pip install -e .
1111
@touch $(VENV_NAME)/bin/activate
1212

1313
test: venv
1414
$(VENV_NAME)/bin/python -m unittest discover tests
1515

16-
build: set-config venv
16+
build: venv
1717
cp LICENSE LICENSE.bak
1818
$(VENV_NAME)/bin/python -m build
1919
rm LICENSE.bak
20-
21-
set-config:
22-
ifeq ($(ENV), stage)
23-
@cp extend_ai_toolkit/config/config_stage.py extend_ai_toolkit/config/config.py
24-
@echo "Using STAGING configuration"
25-
else ifeq ($(ENV), prod)
26-
@cp extend_ai_toolkit/config/config_prod.py extend_ai_toolkit/config/config.py
27-
@echo "Using PRODUCTION configuration"
28-
else
29-
@echo "Invalid ENV value. Use 'stage' or 'prod'."
30-
@exit 1
31-
endif

README.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,16 @@ pip install extend_ai_toolkit@git+https://github.com/paywithextend/extend-ai-too
3232

3333
## Usage
3434

35-
The library needs to be configured with your Extend api key and api secret either through environment variables or command line arguments
35+
The library needs to be configured with your Extend api key, api secret, and organization id, either through environment variables or command line arguments
36+
37+
```
38+
--api-key=your_api_key_here --api-secret=your_api_secret_here --org-id=your_org_id_here
39+
```
40+
or
3641
```
3742
EXTEND_API_KEY=your_api_key_here
3843
EXTEND_API_SECRET=your_api_secret_here
44+
ORGANIZATION_ID=your_org_id_here
3945
```
4046

4147
### Model Context Protocol
@@ -68,7 +74,8 @@ On Windows: `%APPDATA%/Claude/claude_desktop_config.json`
6874
],
6975
"env": {
7076
"EXTEND_API_KEY": "apik_XXXX",
71-
"EXTEND_API_SECRET": "XXXXX"
77+
"EXTEND_API_SECRET": "XXXXX",
78+
"ORGANIZATION_ID": "org_XXXX"
7279
}
7380
}
7481
```
@@ -80,12 +87,12 @@ For advanced scenarios like custom deployments or running without Claude, you ca
8087

8188
STDIO Transport:
8289
```
83-
python -m extend_ai_toolkit.modelcontextprotocol.main --tools=virtual_cards.read,credit_cards.read --api-key=apik_XXXX --api-secret=XXXX
90+
python -m extend_ai_toolkit.modelcontextprotocol.main --tools=virtual_cards.read,credit_cards.read --api-key=apik_XXXX --api-secret=XXXX --org-id=org_XXXX
8491
```
8592

8693
SSE Transport:
8794
```
88-
python -m extend_ai_toolkit.modelcontextprotocol.main_sse --tools=virtual_cards.read,credit_cards.read --api-key=apik_XXXX --api-secret=XXXX
95+
python -m extend_ai_toolkit.modelcontextprotocol.main_sse --tools=virtual_cards.read,credit_cards.read --api-key=apik_XXXX --api-secret=XXXX --org-id=org_XXXX
8996
```
9097

9198
Additionally, You can connect to your SSE server using our custom MCP terminal client
@@ -109,13 +116,14 @@ load_dotenv()
109116
110117
server = ExtendMCPServer(
111118
api_key=os.environ.get("EXTEND_API_KEY"),
112-
api_secret=s.environ.get("EXTEND_API_SECRET"),
119+
api_secret=s.environ.get("EXTEND_API_SECRET"),
113120
configuration=Configuration(
114121
product_permissions=[
115122
ProductPermissions(Product.VIRTUAL_CARDS, permissions=Permissions(create=True, update=True, read=True)),
116123
ProductPermissions(Product.CREDIT_CARDS, permissions=Permissions(read=True)),
117124
ProductPermissions(Product.TRANSACTIONS, permissions=Permissions(read=True)),
118-
]
125+
],
126+
org_id=os.environ.get("EXTEND_API_SECRET")
119127
)
120128
)
121129
@@ -152,17 +160,18 @@ llm = ChatOpenAI(
152160
)
153161
154162
extend_langchain_toolkit = ExtendLangChainToolkit(
155-
api_key="apik_...",
156-
api_secret="...",
163+
org_id=os.environ.get("EXTEND_API_SECRET"),
164+
api_key=os.environ.get("EXTEND_API_KEY"),
165+
api_secret=s.environ.get("EXTEND_API_SECRET"),
157166
configuration=Configuration(
158167
product_permissions=[
159168
ProductPermissions(Product.VIRTUAL_CARDS, permissions=Permissions(create=True, update=True, read=True)),
160169
ProductPermissions(Product.CREDIT_CARDS, permissions=Permissions(read=True)),
161170
ProductPermissions(Product.TRANSACTIONS, permissions=Permissions(read=True)),
162-
]
171+
],
172+
org_id=os.environ.get("EXTEND_API_SECRET")
163173
)
164174
)
165-
)
166175
167176
tools = []
168177
tools.extend(extend_agent_toolkit.get_tools())

extend_ai_toolkit/config/__init__.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

extend_ai_toolkit/config/config.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

extend_ai_toolkit/config/config_prod.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

extend_ai_toolkit/config/config_stage.py

Lines changed: 0 additions & 2 deletions
This file was deleted.
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from extend_ai_toolkit.shared import (
2-
Agent,
32
AgentToolkit,
43
Configuration,
54
ExtendAPI,
@@ -11,14 +10,19 @@
1110
class ExtendLangChainToolkit(AgentToolkit[ExtendTool]):
1211

1312
def __init__(
14-
self, api_key: str, api_secret: str, configuration: Configuration = Configuration.all_tools()
13+
self,
14+
org_id: str,
15+
api_key: str,
16+
api_secret: str,
17+
configuration: Configuration = Configuration.all_tools()
1518
):
19+
configuration.org_id = org_id
20+
1621
super().__init__(
17-
agent=Agent.LANGCHAIN,
1822
api_key=api_key,
1923
api_secret=api_secret,
2024
configuration=configuration
2125
)
2226

23-
def tool_for_agent(self, api: ExtendAPI, tool: Tool) -> ExtendTool:
24-
return ExtendTool(api, tool)
27+
def tool_for_agent(self, api: ExtendAPI, tool: Tool) -> ExtendTool:
28+
return ExtendTool(api, tool)
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
from .options import Options
1+
from .options import Options, validate_options
22
from .server import ExtendMCPServer
33

44
__all__ = [
55
"ExtendMCPServer",
6-
"Options"
6+
"Options",
7+
"validate_options"
78
]

extend_ai_toolkit/modelcontextprotocol/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
def build_server():
1414
options = Options.from_args((sys.argv[1:]), VALID_PRODUCT_PERMISSIONS)
1515
selected_tools = options.tools
16-
configuration = Configuration.from_tool_str(selected_tools)
16+
configuration = Configuration.from_tool_str(selected_tools, options.org_id)
1717

1818
return ExtendMCPServer(
1919
api_key=options.api_key,

extend_ai_toolkit/modelcontextprotocol/main_sse.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ async def handle_sse(request: Request) -> None:
4545
def build_server():
4646
options = Options.from_args((sys.argv[1:]), VALID_PRODUCT_PERMISSIONS)
4747
selected_tools = options.tools
48-
configuration = Configuration.from_tool_str(selected_tools)
48+
configuration = Configuration.from_tool_str(selected_tools, options.org_id)
4949

5050
return ExtendMCPServer(
5151
api_key=options.api_key,

0 commit comments

Comments
 (0)