From f5023d9ce6e6c9f43c17b7d094ae5fe931cb98c9 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Wed, 17 Dec 2025 16:51:42 +0800 Subject: [PATCH] update pay ui --- __pycache__/mcp_database.cpython-310.pyc | Bin 29510 -> 30710 bytes __pycache__/mcp_server.cpython-310.pyc | Bin 94492 -> 95348 bytes mcp_database.py | 48 +++++++++++++++++++++++ mcp_server.py | 36 +++++++++++++++-- 4 files changed, 81 insertions(+), 3 deletions(-) diff --git a/__pycache__/mcp_database.cpython-310.pyc b/__pycache__/mcp_database.cpython-310.pyc index e6d84f78cacad40e2e6015e21dcf0f42c1c59c90..026c675909f85429d8d4061add6a66fdedb430af 100644 GIT binary patch delta 3458 zcmbW3dr(u^8NhRHlA8wsd;kIE5upMRf(fjGuLZ=&I}pP|vns^giv&UvPJ$0MEV7GL zw_$ypwze+L%I;caAA-F*wr-hD|7rhdXF9X9Go3bVXWFR*>>st=nQo_@y7qkcBA~?? z+MCJmp7VX*`Of!!=iYPA&tmAyM<~G`AFq|s>xaI*p2uUC6VlQ9mkWML`cPqF7H1e$ zIyYz-`rE`ECO%X^I#2>SLR&jT7Ld=;I&_r8P$lXh`AiP#Bmrilrj#qABR6r-`?x^E zX}OwlrE?3%xC*#hu5MK3EEK)gb1trd*K>`$ir1&fI2#G0jNvA(nT|GT?A$R?dw^Ov z_%tq=SMmy8&$C@jnk-G$rRG|=R%%(aXqCLA?_#+&u6fO|elkmADK0HC)1SrjXPrzIRbanAG^lY7dP_>mEM-EM z;x&X4g}*8P$RH>ATx~;zBwI6!Ohm1ubu<9^vi&}2Xx~PK;xL>Gtx|Bnx&i^- z$Kf*QsJr-(yW8dUPHM&Z@XKIV4yXX^1ndI9PTx=5nB&3+d}+tXks!3*E26d}37}>bJU{nRzNA~1q ztah4OX_|AnmgUoYmfL{Z7QFAyd!YP(y`Pi3510yc6$!N}W2sLiOnoxj2UGdPMKIUzLIJ^Be^s&V zg;DOH=0=SaW&d+glCoxkhG<;r!hCZ#g9eD*k-PInu8a%0KJNvbiq(hh#EwRYyd@7| zp`axTp&+Smy^lgf*_K7UZ*H46pIR2r8_&f9-P3?Uz^j0;m}ql*D*GCAN5vuz3z7D2 zL>>P9V0P{qDt{WXJ=s~in3K+50!iJbEqtZ$|jY>qDmr@ zhwiZF!R{P6;`|6j1nn#7%A6W1iOSu6ue4u1yFmry)Vz+=cFwGefSooNa^X<$q$kvk z%ZT2U(I~!&`QX(EI1W}C>nS%M2zmTI%+tPcEq)7h7Xg<56%-V7Q6(geeZ`td2A=?1{(mXKKcy1yl3}k|mN+IXkg1Zio%D!B$SeQ7bx*y)Nfe;|%FoMZ z>Rn0l;79Mx-54QvwUY!ie)%=O=DInu*Lt&dy%?Q1U)|B_d5M#$$64`tp#81M5k}dIkA`IaBMfR#i3a zvl?7M@>Z{&RBTkm*(w{MZ=gjdmV|uLpP5E}SF9#~NZgTpAC zV{MDUViu!>%E5(?&^qoP&{M|7KZsrU@$C6&DH$n4L*76f)#Vu$OMs_ozr`q*UIKWZ zqDr@az!x&A@fO;{FZdvAmrfJn9!59dPr!7APoPuh_4M)`&m13yQ;zeY4r%?|eva=r zc3ON|;}kMku#h@p&giu3m=vU7bcv}<0=+Yg7Ad|;dYJNr$z%|V6pxc0q&!JQMNcq1 zIYzn7hI5`a4m@qNLPKez7d{A0gk5mULAd9s$(SVn0B#m+pf~ZH>m;#2QLn0S?*sM#?gH!pIHTe=Ksz7_ z&2GNYG;wQfMD%?)?u1R$)s3 delta 2721 zcmbW3du&rx7{GgOUu(Bc#(>doV=ox%w$`FRp4|rA_1>->U2i$P8&F;Y zCm@PrJ48UyfDd#Ch+gAgni!-0<>L>H(Q7ae0x>aaFb2aPB%beH_ke84v`v2ZJKy=v z_d4gE-1~o^FYcmb!D2CM=&$&PqLBCaaB>DZFs6jeMF_!)+n^QD##;*FaZ0Ok24f%B+`KH1bw%F0bcxd>U^E zFjkFK6G-5ixMphU9JiV~F&{8+EnMrM&i5q8cr|vGe5XCO$l`Xpoi4Y>>2kWtmxLA` z)@WoM76dV#=!=KT%RL@fg-eR-4kAnXmSr9Nf$f-Q{bGmoK!1xtGWjW?4mn7n=?-#| zS>^^*CUuz;4U5WX2ki!2P9L%^DhOd&=NBRoyaW{bU41;>i(OA@?#%kr zm;{SP8JTgGU?-hRCHLoVZm6J2Wf{%~$pa1yY&6P8IJ^`F2?1X82ib6V)U3qAtHG`k zPz6{HSOI|GcqKV)#b_%r+H$qk8V#wMZI#yAe$_eF!E8EUJz&H5P|;<;a1(_AQK5!( zW;qSDpxZ(-?Ldv>_pDr0Ev01J4T)<&{}f;?xf#fusppNV=b?Ppgy&T9V}31aAxXAO zR83N{=SpphztR8S2*=b22OPzdBYf(ZZ)k#STcw+hUZZ=4jrd-1M%Tq1#8qJ>XUj7} zQ*IW&M}*DV3?X30a2am7;j2DoB$~ol5>J{FpQrGnep~$416R;n0;Q)^&=}U@+Sw9~X z!W@rdcqLdsk_*U*%4*ajeN}l|KhtyIRk9;D)-7ETc+=d856_hRT)GSB4B(dgxu3lRnqKi(!Kg_2KAFRZ~n6ByxIRP`f*3#SLr(3Dyig4?<#bJBsMNa zF{!jM3nhwRkV_H2MuwZLq`&D!)JH7MSu~!b`InNtbZRWgL9m^aBn;z#eSrOd14@+E zmieYbFnopr`pe(}>2ymFQKt`EbMp^V^;p7FIejGI6gS_`N5uQk=cmExQCN*+!O=MPy~OjVE^eYXb7`r^<;fwZ+CDQp3&zKZ&vyl#l#J~e`n-))BWwLaSiR5E!C?FX zi)!hphOFE1(V>%IXO4+17Gt|ZVo*6-vWbuM_41e%dD$3bWAv57I2BwdZ*T!fc0dqT zo7V2}^HDJ*L~wwP?J0N&=1u{I0dP8HgI}ouE4!vvP1WQuJ8zy-na8|ez?_Ui_+?mB zO0Kd4=(6PO@-s;zpg|Pz9cD7HB2W5+o5Lh2VT@GUh|egu>{&272ThWtZJGpL12wwrb4w$GH?l0^D zya9L{q9lryQ5}ZvR%J+gy zhWeakvXSHcpxl^w+0@O8wL*6{k8viL7XTIm7J(7D*O%7pfFXRA;P(Nm z0Pg{|0vZ7=fL6d901M~=z@3YC0pNbaM*wh7;G<+)f7-%hAU+3p9&iExM-X2ITn9+x R)&6``EPdYZKuq$(e*iC}X`%oC diff --git a/__pycache__/mcp_server.cpython-310.pyc b/__pycache__/mcp_server.cpython-310.pyc index 42430b61aca56703b6faf7fef1be99c986b4ad28..81c425da38f4a4cc96c3b145edc9247470f06880 100644 GIT binary patch delta 16256 zcmb7K34Bb~_s^Y7CYvmlNRW`oLTo`%VvQvzVu^Ju$;f*oWb-Dm>)5*2)?1zud#&AQ zs?jR#ul@bH=%#2fEnNuF7S-xPwf^UO-pEWM`sts~`_6f1yZ4@Z?z#89my+*%u2=X3 z7X$?bc+tPh`Mq>QBsr*N}m!_j!;Ub3S~%%x01HZdzDZ-C>xbc zN-vUcmMeW4#Ew@UAlcRu^Idw|lxJOf(dKa3#Ny|}TJk5KaIskuFMhYO=bqNjDbKsD z9si{Hg7PA3zJ&f#zxML)KILWCZz=!wS6)#xZf$>w&s47}BYIUSBM%QNk0>cL-UG^G zG@=ycHRW~X;8YXg%%(KFH^}*+YN0r+yh(;{k@A1!Tb8iEx0QE1?;ZbD{>NQ=*VVQ6 zT)*$Ty7Yl^guC=1`TwYz?~j#F*mkqaX1dGfQ{^bzd`6x8NLfxD^qiby%5k@qgF0rI zouJO&t^B$2g&uGSr=^5wtQ{Yp8*x}%J~yB+se&ME`BiLcT7YE68j zd|Rc7@01;^yH7c%oM);WR&ujnxZ{rJJ32LWxk9;A#os>-?|bEkD!M-^Mq=0G_p)*& zwTkjTb>gb>Qx)B7t^lxOIn3WZlLT8+s_GtQ3kD=NTuAY!%SRK?~i;z^bz9nMYD@y3F_XR)d8PSy;&8BT7_mg_d8n ztZ8-_a-~BkA!HnS591p0gS2bY zRi~OoUC)WHn)#$%kFGEe3(Q1)#64N5aqW^goURBD6GWm)Bl45Lh7Q;4LD-0{$a|$2 z$)f0L42SgFq;k%qnSy3^-6;#i>qu9pe;DljB=20!`<9a)}Aoc=8DN7Mi{MD4AHPBAs`qPu}and$cdx&|#Z zTcJBZb=0IXm_$QJ1u?7HNg7FplE#30Y78UEaMBofPmK{INq3M6dQ@{WBS|ufGzQ&M zV>C&|kOsP3vyZVP8AlpJYSeHbBv!h{lL|&vvy%xVnMfK#@2N3~BpIZEao6l4lO#6M z81AXzs4_Q`Nt8t@2u;mS6q2Z|G!jiG6@<5D zja-uCk;a&NYUGoofHW`xHTx)BDICfSQWi;yiRO^XL|GC#+_6zjmqOX5jwIZvjv{;G}0pJ1&it{U?sYyGUerJ}wpQyo)TaXHm~~gHQ>R!+Zw*~K>rPW>kItQLovuXDCK65jwN#ZOlm-r^q3fop60al} zG~qKP-d3dDI(9gaY9bczdb&zz>hh){>>IWU{@v*M-GpD}Y~G5}yQRd(ip1PX*EYJI zrE5D~JGcWoiQ1()Sb-PjZer{y2_SrquIF9X3-tRU8@xo+UKRS!u|9SyL;q!>O6huq zuKjeq%KBwQ9bo;JS^qVL6WjU`-q%;xLc=O`_i7{{M$4L-lQ<-l6Nibp4O6 zcj^hbO?r0XM2xQ{sDXbIBJ5UloY;Ke!gG2J^pp>WP1 z;!_SZZ9YUFRk0KYs@fDk`u&WqW29xLUqkCSYn@>HoE&Q0g@I~aRa5-11x-N|zo6?R z*%i6+KTT5SQnQ0nuGp1wU$VkiBsjzS;!GF+Ec3r6{x{5@Mf};Sx62*! z;#<|5^W!_B&vCxbVV${Ebmp?odD1Cooq42_GoNlRu-ZkUD!73KBmn;s^S>wR2j)Mh z;&k%kbkoWJZ9iwU!|G5S(-so%Y1~F;+M`>^IuB`hgqU})t{;s zW!Q@fvZiNb6)0-PX_54_IDcT7!8Ft_=&znX^ybBrL%>+FgC)$@7PwDBrR8>Kp5tRlKslyli8|lMj`z*xT&f!bQz09)0RU>E4UmH}YM; zg_oW_|N6R$H}^Cv9o{}yh*hPB@B7;%q&(E=6S2AU$@^ox10^+}?I3VQ${w>K<%#6O zVuzGncM*2$_MzBO>eqdqpqr&VF4K+H^D{Hu^zC~f5JuWQSVriFn~R9jCjHublgfwz zJIt0N5Pn$t_uyn<`55#kvPW74Nt+ElC&K&qczM}t5!x7^Y`modZN6~kr4 z@HXPOTofHH+l;7HdkAzbtQ%}L-`38^K_klJoWyX7qTNC}3-8SU&B62UHdW16XBTQc z#>kQB%7EjLcmqxmB$^EUo?x)iIZ$lrhbb>AD99a&7V$#Gv@pWkEb0kAq5b&s$j&0P z9Lg5}7XcM=z^KFGvh*F@Mof^MMt2oAOSRDvBIs*K;eNNb=9K!FIPsW#V@#U3E(6CV zTmFR9EC-EkD;#qE*d`)S4xds_?j3un{a+AOT5Esb@#7w#CWM#QGt@)PM8w=yvXwPL zo*S1~%bRY~G)iSJ&0j`XTZt92pEX9tPKc6Ate>|2m!5aAXXzOKKvjotW;T*PjjtQC ziR8c3r*4@RTD<)zGJYaJSpKZz8)*Wq1!E`yex&dY`W_^EPZ;-a+b%QOet$x8D;`Xu zuXY_y9tK!2uqaTm0AJkt8G~&zv1QmC{Xv|spu5zPu7>Ca_8$7`9%9i7+j?&v0Wd!5_V0IDHZ@#Cqc^2W#*; zH@A^Ik{vFZ%kQ$Ai5MOe4cvkBv=1OyB<6c<_EN+aQ5e9KX^U7O<_mir#hYG)_>`E^ zy^6$UlVX`K)_ZLrsqiZD-fW&v76ZK$-vM3=O!G-6(XSY@@NYH;ZH1SEhR~JNQ;S;= zUVP*A^1Z7(>wNi&#TQoZjc)GV3X-rNBPRs>AkRQZ_BDN0l)^gqlKyS!i*0 z!fN5LPLi!`3EjgHJ;ib-epTb8B`ALLO^QFHq!)nLDuElk4gJJga%xUo2(JcC;vLjx zs=RHBZlPvjKTdM@EeZFDT2tic$UEWbL;7-KPKz)a6%RNTIkVC=Oc^~r>ZxgwjZ!fj z)CAMQ#;)ODP<2dNf=nxpltZV@3*|oKl8%-KkkUCVx~1FYQ^a(7=c@U%{<&h@rH^QK zpB^L9WybU<(TW^LiDq*B^u*59RpEa%LE1>IIdwPD?9uh7A#8y`v=s76PMnO+4G6SR z|Fza&wsE;l&rP_$Cb#-M+^%uErIpe?u%OaolFMUYUP6r>y_d(eZjVOIc_c45a6zTp zwsLdc)-mg#v>s3b*Z|;z$ULHI8vZlT!0>5L;4s(dfit)JbU*o8egpA@Jf0sb+EIm$ zlJyEkci0RUTL7B~sF8TM^GuJ8#HXOM|IJX`LJm7LC_$DON$+Q>McG0BgynCoed!Mc zTZQOQx_m}0;kZf$yF;A5v>a_kMViycM(2;Y_B3bq?x<9Zh*xd+C(Mczshk{ZW{qu9 zsgOn|M6MOj8%{YHcF3UFy^|aIQXUw`LO(j})G<-v>rd@dN^*K4eYCBBZ2%rA_vCpg zqUx2do&Bwe4uEs#<%s_B{Ja!#t2AN$c@d99aQZ04d4+cEGz{-dsc|gTz9inb(xe9; z6oGq)yyOp^)$)L2qNr0^f8oyBale97A8veSsp@paHpgntE-2Qlmb{$&;vzNCq79ed zu4*WLmA6(Ui!r75KlPq>Y!@<^>zkRGIn7>>uhqkyH{EFuz}sLzx{O&fSU6?=ng%}T zMPvEonxzhR&SsH~QKC3|Ew;i!HDA#Np(p07Y+I2tFsmT1FjpmF{oGjI@jVA9--)x&5OGoPgh4End*o(BBLi#Dp%_-s~vU6y^(B?S3^XyZ#Y>45W*AjJ$JHdU>?DDdnEH29C zYiEhGrJL8D7M4*^A1xj0x{KxV(7K+M3oyMXP3s>DbH}11n7pQ~vSfWMP4rvq!(t*~ z+n7X{0?=on)(h|$ZvWtH4=xE3aWb-GlzBNZ<+ZYgr7KFB3Nb~#ydl#v6^hek#KwuD zP|n<#@5loqpCB>B<19E7+ypdy{bs9K#h7Hu2Ot{nh;9JXJ&1^h8Jb{Lbm#i*6~&3JT{KV>3bz z!>0+HK}7{cw%iQ6npKcb$ub1Sb0MuZ=pbXzW4ye)X-ee0ZPAvQP}?cDY>O5*d8X>8jUHSi^3B-ZoDolGe6 zy2skBo<)`GRjZyr^1Xdc>QqKPG0?RTfgykQNhp;in zIB$PkJRY^lZUpRVYVSM=(&VfAuZgR2*Q*KDlk`z^aTnkaU=-Y-CON%n#TbQ-*I>1* z^LGUbHVSOG7;xF5O!U&m0>%LlHjfy{A!T(%t5RFpAE*x2*IsIFR0lYEjevG^!r~yZ z3J6FUSiXK^`LoODO_7!-+r8eec_H-Z@|x?{EvYCwCx3bm4cRf*)U+9&JTEmud--zX z>#ZFB|AMj*?iT@g1@oY}LZZmrsV_$${}ABLkOpYA`cMZRj1-gPl!FdBVO==5C0HDm zj~*E+2Fg=Mo)E{R@}VNe%MU)Z(k>YH(LV2_De%eR$RR3Cn}+-8fLs9Ay>@8GsGrh& zw5ceN&5l0M8VjvBghbI5hhB^xJa|ZS#oi_KF3xGT71OqXrIbqDZv*2Qa^unZLMz>W zbg>Y#W#?m0SRRM_C*%jmqWzvElG166yml<1<1+A3PU(>O4Cr+L?t-xxamx>L>p_(O zHps!plSQ_C{rd5hU zIFXvSQw{dAc$rMmw=K8nggE6?iqLtj|Ma`RF^)IUk$ z5Oq}^Js8%6hkO(kTxCCFF92iQGWbk*XFgX#rwSsoKbljI4IknO%8v9MEE427TPoTsQxev%H@)?9mT_?ubtiI-SI1M(h1VE zafGyJI1ayn&F8slDR+Sc+e=q{_q`=;A#{w10W}xko&!EMrlYST0bI;0A6F9_8O?Ag zuEX%6{NU0iaaQJhulZCEW4HX~`*+3Ha_0|m(?>ud0A6@@d1Cnif)DbKLQ47UrQxf9 zkrb=I%aFZc1CK?5`ARQuN{4%p$U^5`0EK# zAsheJhQ9a=`E5+#IrNzKpXu_Y-x^ZAIP%*g7M_mNa?J1X0jQ&ksVh{99{zol$iGuM z)4r(e_eoHvD{px$l{?MDu>FdJd;&2(Xq7*->(Y{4(b@?#jxF)m9x`J?g3SBl>4X*F zae@}W;|v0Nj<33WH5FyC1D8eZTNwOfCEdf_C$&`VD>>^%lqDA?=jFN^@yS=wNEV=+ zn2E6-`OK$-42U=}Iprtg)*G?xC2!og-@y~Obg zY1w$DHO@_ZisTxEp=s9u56fFOBkG4@0GJ_X0KbvSz=L@=+2YS{MO106TZ6qVe?b{( z7THGo8}w~}33g^cwR}YfPaw*^a@Xzq?j+mlRw7dVeYJlV0$Dbnhja~mYCN5U*=n#AhJNd&5f5Y+-@ZI>X3%3Efg}WD-dhJhW=H^i z@KnuJY&D_Pw;KJtNfbCbLqDc^#<6aV8HZSKK4zkAZvba*82VoyP!GItQ1?tscRD&a zK_Z}yLzy#Z$k4w1250mcnwC1Sf4XrF@P$LpTP~)^TT05tu;I+)&SLhp27rcuMgUGq z?j3Kgk>K4RYpXwPdi+Jzt`9eh`ptL)<_Np9vbH-b>3ci9A<8?VFE@)%!xPBO+>j&| zC)riI9WRkIsTcT)$g-6_!bgba`WlOfweW$yLVwdDnhbHrf;X$a7!yYiQKsU;F_q|? zU!_mv?;8Kx!r)i@P3H_uT*^Twf~ zrj{|K*+}d}#4)_=V?Qxk#5JdcD8`hRuUvKMkrfwKmRx*gYx%SLDqh)6FH>9*=pP_r z0zD$2+XF;g<7bgeHMP`&8d#|BCnM3K>|}u0ZHm86x_Ee#16Bf_BDli^t*rs9 z1-FUzH0UJ&2jB(3OMtzAmjR`KGQc}t^Z`wK1>}CftAGQ5*8v9sZvYMf4g>xNcpLC8 z;61=mz<&Y90B-?40DJ`a6!0biou@R=l_N>?ar)}N28$%owk$qGg!zd}de?B#&2kx` zZdbM-Tx{|e?aQKKL`8_Wugua;)b|k`%Az`nXZ#v*+2cIq+LuYL(~QM^ME|UZ=q`@v zAw5MaOELv9GDJ`5DI!F&ZtW?GLfaBcYX@i#xKBUZQ#?>RA%teaLT>y_0r(o%L+{c{ zl#8Z%lN8Y{8SB_s;JkOa^O9GDMe7Mq?)Q>^Kz%sihQ2yQG!?D&11TcL(hF)`%f3z# z^SvE>dg8(I12>LU#q?sutK!8MFKu0m7Y;a$8t*oaftmq_$3Z25Y6&<=x2gPeUHNcb zX>I&dfazjwv064*UymfsLw|t)B*!4alSK zpt<~4N*W5S)smH)gHKR1a1){xeYS;MaVs5|?MCcOjD=oP?K0Ed&~hAtW(bvSq& zH;zqzH2V{jxvw|$t^-7K(N$Llh;PN9vebd1tq`}$W<4O9`dIeBOFezlP})U}rxg9f zQ1MknXL3TNpd-YbfJ5N5vq{!=*45995Ptf(VWLy?b;!RZpa)_M(x}pv=gmL$F2hBp zqYrG|lidsYJ|4cSinP8^ubL5*fbOoi)vGFL{m^M|4^0k0YCQaLRCvCz~J4Acw?Ca4NhdvSzZY|OGnU0emd`g zZVUkMiWvlo6PEhorSVhtZ$vqLZT30&Svdvtc_&v@3lr-YMKGQ8twHqOzDS*2lu@hD zrWM(Z2k#WU%Sds5B*tM4sLW@(N9=#mpByQA2K`BWp?6yxk8J(aNZQ~|>o-S=zlJqI zXQBZyfTn<0KpX*WaJ=4rMnAd7R9Ib41UMX#OFjsVh5^UlC00ad3q(PRy|V^4=VTT!uH3((hDMYJf^4_d{2!m3}jio9er zwcBJkL)NF!6ksDWIN#sxnUr}7#_Mawixy(F{-5!pftaL!IbJ+zxeEO}J#T_&-i~eI zUYo#?@HM8E*CIAPqZyBG>sK>Ggno8{XehSmHztTEkx>>t5nH@FCwK*LQpZw;S@{nJ z3u!-ce^sJq{2ThrNtAH=^tF@7iLLC_Ng`0(=XPQtQ>Vq2m0Lg|Vm|>)XH@m1W$M>6 zXi^U8;hE$oOYfK|T8W?a$(f=}(EBt3Dv8DTS)^~s6fcMe^g;Aw)tVjp=VcXU%qX@| z@$W*Tw^|D5!>ldGc<0B9cO=iL*RlsdrRgD)MJHp^>wW3R4qU-pf;cZpb;Pn&=}AJ5Dka{!~qfjtpIHRNdWr$NWyj? z+XH$7`U3g^QUU!5tbxNvrKF9_7&&z4;B<`-JOd!(hnX9oZUT6pj>5?CY@wy2%Q)w| zo}xf?0}KRU54Hw4MhqR?&*hg(8V+R|SGZF!=iQqt+!zSP0j#jBt`5Ed=Y|u6cvcU5#rZrcf!YetY<67W9b+tDnI-=)oFmuy%Q{rW>r)9;^qM6|&gPq7Kyo zGocOz<4P5Nd?o+OD*VpO4pR z5mR^XUD9l$p|y7jxNoh)?&_MCBcQH6xj;1Y4s05vKVBegAp(E(WfFcD&5g|E^`guE JC=hYt{{S_lbmag5 delta 15523 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 Dict[str, Any]: + """ + 根据股票名称查询股票代码 + + Args: + stock_name: 股票名称(支持模糊匹配) + + Returns: + 匹配的股票列表,包含代码和名称 + """ + pool = await get_pool() + + async with pool.acquire() as conn: + async with conn.cursor(aiomysql.DictCursor) as cursor: + # 使用 LIKE 进行模糊匹配 + query = """ + SELECT DISTINCT + SECCODE as code, + SECNAME as name, + F030V as industry + FROM ea_baseinfo + WHERE SECNAME LIKE %s + OR SECNAME = %s + ORDER BY + CASE WHEN SECNAME = %s THEN 0 ELSE 1 END, + SECCODE + LIMIT 10 + """ + + # 精确匹配和模糊匹配 + like_pattern = f"%{stock_name}%" + + await cursor.execute(query, (like_pattern, stock_name, stock_name)) + results = await cursor.fetchall() + + if not results: + return { + "success": False, + "error": f"未找到名称包含 '{stock_name}' 的股票" + } + + return { + "success": True, + "data": results, + "count": len(results) + } diff --git a/mcp_server.py b/mcp_server.py index 6cda9cd7..ac55ace4 100644 --- a/mcp_server.py +++ b/mcp_server.py @@ -87,7 +87,7 @@ MODEL_CONFIGS = { }, "deepmoney": { "api_key": "", # 空值 - "base_url": "http://111.62.35.51:8000/v1", + "base_url": "http://111.62.35.50:8000/v1", "model": "deepmoney", "max_tokens": 32768, # DeepMoney 本地托管,上下文 65536,输出限制 32768 }, @@ -495,6 +495,20 @@ TOOLS: List[ToolDefinition] = [ "required": ["query"] } ), + ToolDefinition( + name="get_stock_code_by_name", + description="根据股票名称查询股票代码,支持模糊匹配。当只知道股票名称不知道代码时使用。", + parameters={ + "type": "object", + "properties": { + "stock_name": { + "type": "string", + "description": "股票名称,例如:'贵州茅台'、'舒泰神'、'比亚迪'" + } + }, + "required": ["stock_name"] + } + ), ToolDefinition( name="get_stock_basic_info", description="获取股票基本信息,包括公司名称、行业、地址、主营业务、高管等基础数据。", @@ -1578,9 +1592,24 @@ async def handle_search_research_reports(args: Dict[str, Any]) -> Any: response.raise_for_status() return response.json() +async def handle_get_stock_code_by_name(args: Dict[str, Any]) -> Any: + """根据股票名称查询股票代码""" + # 兼容不同的参数名: stock_name, name + stock_name = args.get("stock_name") or args.get("name") + if not stock_name: + return {"success": False, "error": "缺少股票名称参数 (stock_name/name)"} + + logger.info(f"[get_stock_code_by_name] 查询股票名称: {stock_name}") + result = await db.get_stock_code_by_name(stock_name) + return result + async def handle_get_stock_basic_info(args: Dict[str, Any]) -> Any: """处理股票基本信息查询""" - seccode = args["seccode"] + # 兼容不同的参数名: seccode, stock_code, code + seccode = args.get("seccode") or args.get("stock_code") or args.get("code") + if not seccode: + return {"success": False, "error": "缺少股票代码参数 (seccode/stock_code/code)"} + result = await db.get_stock_basic_info(seccode) if result: return {"success": True, "data": result} @@ -1808,6 +1837,7 @@ TOOL_HANDLERS = { "search_limit_up_stocks": handle_search_limit_up_stocks, "get_daily_stock_analysis": handle_get_daily_stock_analysis, "search_research_reports": handle_search_research_reports, + "get_stock_code_by_name": handle_get_stock_code_by_name, "get_stock_basic_info": handle_get_stock_basic_info, "get_stock_financial_index": handle_get_stock_financial_index, "get_stock_trade_data": handle_get_stock_trade_data, @@ -3466,7 +3496,7 @@ MEETING_MODEL_CONFIGS = { }, "deepmoney": { "api_key": "", - "base_url": "http://111.62.35.51:8000/v1", + "base_url": "http://111.62.35.50:8000/v1", "model": "deepmoney", }, }