Skip to content

Commit b663f93

Browse files
committed
feat: update API implementations and version
1 parent 45415e8 commit b663f93

File tree

6 files changed

+193
-144
lines changed

6 files changed

+193
-144
lines changed

inspect_ankr_types.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
"""
22
Script to inspect Ankr SDK request types and their parameters
33
"""
4+
45
import inspect
6+
from typing import Type
7+
58
from ankr.types import (
6-
GetNFTsByOwnerRequest,
7-
GetNFTMetadataRequest,
9+
GetAccountBalanceRequest,
810
GetBlockchainStatsRequest,
911
GetBlocksRequest,
10-
GetAccountBalanceRequest,
11-
GetTokenPriceRequest
12+
GetNFTMetadataRequest,
13+
GetNFTsByOwnerRequest,
14+
GetTokenPriceRequest,
1215
)
1316

14-
def print_class_params(cls):
17+
18+
def print_class_params(cls: Type) -> None:
1519
"""Print the parameters for a class constructor"""
1620
print(f"\n{cls.__name__} parameters:")
1721
sig = inspect.signature(cls.__init__)
1822
for param_name, param in sig.parameters.items():
19-
if param_name != 'self':
20-
print(f" - {param_name}: {param.default if param.default is not inspect.Parameter.empty else 'REQUIRED'}")
23+
if param_name != "self":
24+
print(
25+
f" - {param_name}: {param.default if param.default is not inspect.Parameter.empty else 'REQUIRED'}"
26+
)
27+
2128

2229
print_class_params(GetNFTsByOwnerRequest)
2330
print_class_params(GetNFTMetadataRequest)

src/web3_mcp/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Version information."""
22

3-
__version__ = "0.1.0"
3+
__version__ = "0.1.0"

src/web3_mcp/api/nft.py

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@
77
from ankr import AnkrWeb3
88
from pydantic import BaseModel, Field
99

10-
from ..constants import (
11-
NFT_GET_BY_OWNER,
12-
NFT_GET_HOLDERS,
13-
NFT_GET_METADATA,
14-
NFT_GET_TRANSFERS,
15-
)
16-
1710

1811
class NFTCollection(BaseModel):
1912
blockchain: str
@@ -73,19 +66,19 @@ def __init__(self, client: AnkrWeb3):
7366
async def get_nfts_by_owner(self, request: NFTByOwnerRequest) -> Dict[str, Any]:
7467
"""Get NFTs owned by a wallet address"""
7568
from ankr.types import GetNFTsByOwnerRequest
76-
69+
7770
try:
7871
ankr_request = GetNFTsByOwnerRequest(
7972
walletAddress=request.wallet_address,
80-
blockchain=request.blockchain if request.blockchain else None
73+
blockchain=request.blockchain if request.blockchain else None,
8174
)
82-
75+
8376
if request.page_size is not None:
8477
ankr_request.pageSize = request.page_size
85-
78+
8679
if request.page_token:
8780
ankr_request.pageToken = request.page_token
88-
81+
8982
result = self.client.nft.get_nfts(ankr_request)
9083
assets = list(result) if result else []
9184
return {"assets": assets, "next_page_token": ""}
@@ -96,47 +89,48 @@ async def get_nfts_by_owner(self, request: NFTByOwnerRequest) -> Dict[str, Any]:
9689
async def get_nft_metadata(self, request: NFTMetadataRequest) -> Dict[str, Any]:
9790
"""Get metadata for a specific NFT"""
9891
from ankr.types import GetNFTMetadataRequest
99-
92+
10093
ankr_request = GetNFTMetadataRequest(
10194
blockchain=request.blockchain,
10295
contractAddress=request.contract_address,
10396
tokenId=request.token_id,
104-
forceFetch=True
97+
forceFetch=True,
10598
)
106-
99+
107100
result = self.client.nft.get_nft_metadata(ankr_request)
108101
if hasattr(result, "__dict__"):
109102
return result.__dict__
110103
return {
111104
"name": getattr(result, "name", ""),
112105
"description": getattr(result, "description", ""),
113106
"image": getattr(result, "image", ""),
114-
"attributes": getattr(result, "attributes", [])
107+
"attributes": getattr(result, "attributes", []),
115108
}
116109

117110
async def get_nft_holders(self, request: NFTHoldersRequest) -> Dict[str, Any]:
118111
"""Get holders of a specific NFT collection"""
119112
from ankr.types import GetNFTHoldersRequest
120-
113+
121114
ankr_request = GetNFTHoldersRequest(
122115
blockchain=request.blockchain,
123116
contractAddress=request.contract_address,
124117
pageToken=request.page_token,
125-
pageSize=request.page_size
118+
pageSize=request.page_size,
126119
)
127-
120+
128121
result = self.client.nft.get_nft_holders(ankr_request)
129122
if hasattr(result, "__dict__"):
130123
return result.__dict__
131-
124+
132125
if hasattr(result, "__iter__"):
133126
holders = list(result) if result else []
134-
return {"holders": holders}
127+
return {"holders": holders, "next_page_token": ""}
128+
return {"holders": [], "next_page_token": ""}
135129

136130
async def get_nft_transfers(self, request: NFTTransfersRequest) -> Dict[str, Any]:
137131
"""Get transfer history for NFTs"""
138132
from ankr.types import GetNFTTransfersRequest
139-
133+
140134
ankr_request = GetNFTTransfersRequest(
141135
blockchain=request.blockchain,
142136
contractAddress=request.contract_address,
@@ -145,13 +139,14 @@ async def get_nft_transfers(self, request: NFTTransfersRequest) -> Dict[str, Any
145139
fromBlock=request.from_block,
146140
toBlock=request.to_block,
147141
pageToken=request.page_token,
148-
pageSize=request.page_size
142+
pageSize=request.page_size,
149143
)
150-
144+
151145
result = self.client.nft.get_nft_transfers(ankr_request)
152146
if hasattr(result, "__dict__"):
153147
return result.__dict__
154-
148+
155149
if hasattr(result, "__iter__"):
156150
transfers = list(result) if result else []
157-
return {"transfers": transfers}
151+
return {"transfers": transfers, "next_page_token": ""}
152+
return {"transfers": [], "next_page_token": ""}

src/web3_mcp/api/query.py

Lines changed: 36 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@
77
from ankr import AnkrWeb3
88
from pydantic import BaseModel
99

10-
from ..constants import (
11-
QUERY_GET_BLOCKCHAIN_STATS,
12-
QUERY_GET_BLOCKS,
13-
QUERY_GET_INTERACTIONS,
14-
QUERY_GET_LOGS,
15-
QUERY_GET_TRANSACTIONS_BY_ADDRESS,
16-
QUERY_GET_TRANSACTIONS_BY_HASH,
17-
)
18-
1910

2011
class BlockchainStatsRequest(BaseModel):
2112
blockchain: str
@@ -76,51 +67,49 @@ def __init__(self, client: AnkrWeb3):
7667
async def get_blockchain_stats(self, request: BlockchainStatsRequest) -> Dict[str, Any]:
7768
"""Get blockchain statistics"""
7869
from ankr.types import GetBlockchainStatsRequest
79-
80-
ankr_request = GetBlockchainStatsRequest(
81-
blockchain=request.blockchain
82-
)
83-
70+
71+
ankr_request = GetBlockchainStatsRequest(blockchain=request.blockchain)
72+
8473
result = self.client.query.get_blockchain_stats(ankr_request)
8574
if hasattr(result, "__dict__"):
86-
return result.__dict__
87-
return {
88-
"last_block_number": getattr(result, "lastBlockNumber", 0),
75+
return {"stats": result.__dict__}
76+
77+
stats = {
78+
"lastBlockNumber": getattr(result, "lastBlockNumber", 0),
8979
"transactions": getattr(result, "transactions", 0),
90-
"tps": getattr(result, "tps", 0)
80+
"tps": getattr(result, "tps", 0),
9181
}
82+
return {"stats": stats}
9283

9384
async def get_blocks(self, request: BlocksRequest) -> Dict[str, Any]:
9485
"""Get blocks information"""
9586
from ankr.types import GetBlocksRequest
96-
97-
params = {
98-
"blockchain": request.blockchain
99-
}
100-
87+
88+
params = {"blockchain": request.blockchain}
89+
10190
if request.from_block is not None:
102-
params["fromBlock"] = request.from_block
103-
91+
params["fromBlock"] = str(request.from_block)
92+
10493
if request.to_block is not None:
105-
params["toBlock"] = request.to_block
106-
94+
params["toBlock"] = str(request.to_block)
95+
10796
if request.descending_order is not None:
108-
params["descOrder"] = request.descending_order
109-
110-
97+
params["descOrder"] = str(request.descending_order).lower()
98+
11199
ankr_request = GetBlocksRequest(**params)
112-
100+
113101
result = self.client.query.get_blocks(ankr_request)
114102
if hasattr(result, "__dict__"):
115103
return result.__dict__
116104
if hasattr(result, "__iter__"):
117105
blocks = list(result) if result else []
118106
return {"blocks": blocks, "next_page_token": ""}
107+
return {"blocks": [], "next_page_token": ""}
119108

120109
async def get_logs(self, request: LogsRequest) -> Dict[str, Any]:
121110
"""Get blockchain logs"""
122111
from ankr.types import GetLogsRequest
123-
112+
124113
ankr_request = GetLogsRequest(
125114
blockchain=request.blockchain,
126115
fromBlock=request.from_block,
@@ -129,62 +118,63 @@ async def get_logs(self, request: LogsRequest) -> Dict[str, Any]:
129118
topics=request.topics,
130119
descOrder=request.descending_order,
131120
pageToken=request.page_token,
132-
pageSize=request.page_size
121+
pageSize=request.page_size,
133122
)
134-
123+
135124
result = self.client.query.get_logs(ankr_request)
136125
if hasattr(result, "__dict__"):
137126
return result.__dict__
138127
if hasattr(result, "__iter__"):
139128
logs = list(result) if result else []
140129
return {"logs": logs, "next_page_token": ""}
130+
return {"logs": [], "next_page_token": ""}
141131

142132
async def get_transactions_by_hash(self, request: TransactionsByHashRequest) -> Dict[str, Any]:
143133
"""Get transactions by hash"""
144134
from ankr.types import GetTransactionByHashRequest
145-
135+
146136
ankr_request = GetTransactionByHashRequest(
147-
blockchain=request.blockchain,
148-
transaction_hash=request.transaction_hash
137+
blockchain=request.blockchain, transaction_hash=request.transaction_hash
149138
)
150-
139+
151140
result = self.client.query.get_transaction_by_hash(ankr_request)
152141
if hasattr(result, "__dict__"):
153142
return result.__dict__
154143
return {
155144
"hash": getattr(result, "hash", ""),
156145
"from": getattr(result, "from", ""),
157146
"to": getattr(result, "to", ""),
158-
"value": getattr(result, "value", "")
147+
"value": getattr(result, "value", ""),
159148
}
160149

161150
async def get_transactions_by_address(
162151
self, request: TransactionsByAddressRequest
163152
) -> Dict[str, Any]:
164153
"""Get transactions by address"""
165154
from ankr.types import GetTransactionsByAddressRequest
166-
155+
167156
ankr_request = GetTransactionsByAddressRequest(
168157
blockchain=request.blockchain,
169158
walletAddress=request.wallet_address,
170159
fromBlock=request.from_block,
171160
toBlock=request.to_block,
172161
descOrder=request.descending_order,
173162
pageToken=request.page_token,
174-
pageSize=request.page_size
163+
pageSize=request.page_size,
175164
)
176-
165+
177166
result = self.client.query.get_transactions_by_address(ankr_request)
178167
if hasattr(result, "__dict__"):
179168
return result.__dict__
180169
if hasattr(result, "__iter__"):
181170
transactions = list(result) if result else []
182171
return {"transactions": transactions, "next_page_token": ""}
172+
return {"transactions": [], "next_page_token": ""}
183173

184174
async def get_interactions(self, request: InteractionsRequest) -> Dict[str, Any]:
185175
"""Get wallet interactions with contracts"""
186176
from ankr.types import GetInteractionsRequest
187-
177+
188178
ankr_request = GetInteractionsRequest(
189179
blockchain=request.blockchain,
190180
walletAddress=request.wallet_address,
@@ -193,12 +183,13 @@ async def get_interactions(self, request: InteractionsRequest) -> Dict[str, Any]
193183
contractAddress=request.contract_address,
194184
descOrder=request.descending_order,
195185
pageToken=request.page_token,
196-
pageSize=request.page_size
186+
pageSize=request.page_size,
197187
)
198-
188+
199189
result = self.client.query.get_interactions(ankr_request)
200190
if hasattr(result, "__dict__"):
201191
return result.__dict__
202192
if hasattr(result, "__iter__"):
203193
interactions = list(result) if result else []
204194
return {"interactions": interactions, "next_page_token": ""}
195+
return {"interactions": [], "next_page_token": ""}

0 commit comments

Comments
 (0)