@@ -581,3 +581,254 @@ async def empty_tags():
581581    exclude_tags_mcp  =  FastApiMCP (app , exclude_tags = ["items" ])
582582    assert  len (exclude_tags_mcp .tools ) ==  1 
583583    assert  {tool .name  for  tool  in  exclude_tags_mcp .tools } ==  {"empty_tags" }
584+ 
585+ 
586+ def  test_ignore_deprecated_default_behavior (simple_fastapi_app : FastAPI ):
587+     """Test that deprecated operations are ignored by default in FastApiMCP.""" 
588+ 
589+     # Add deprecated operations to the simple app 
590+     @simple_fastapi_app .get ( 
591+         "/deprecated/items/" , 
592+         response_model = list , 
593+         tags = ["deprecated" ], 
594+         operation_id = "list_deprecated_items" , 
595+         deprecated = True , 
596+     ) 
597+     async  def  list_deprecated_items ():
598+         """[DEPRECATED] List all items (deprecated version).""" 
599+         return  []
600+ 
601+     @simple_fastapi_app .get ( 
602+         "/deprecated/items/{item_id}" , 
603+         response_model = dict , 
604+         tags = ["deprecated" ], 
605+         operation_id = "get_deprecated_item" , 
606+         deprecated = True , 
607+     ) 
608+     async  def  get_deprecated_item (item_id : int ):
609+         """[DEPRECATED] Get a specific item by its ID (deprecated version).""" 
610+         return  {"id" : item_id }
611+ 
612+     @simple_fastapi_app .post ( 
613+         "/deprecated/items/" , 
614+         response_model = dict , 
615+         tags = ["deprecated" ], 
616+         operation_id = "create_deprecated_item" , 
617+         deprecated = True , 
618+     ) 
619+     async  def  create_deprecated_item ():
620+         """[DEPRECATED] Create a new item in the database (deprecated version).""" 
621+         return  {"id" : 1 }
622+ 
623+     mcp_server  =  FastApiMCP (simple_fastapi_app )
624+ 
625+     # Should include regular operations but exclude deprecated ones 
626+     expected_operations  =  ["list_items" , "get_item" , "create_item" , "update_item" , "delete_item" , "raise_error" ]
627+     deprecated_operations  =  ["list_deprecated_items" , "get_deprecated_item" , "create_deprecated_item" ]
628+ 
629+     assert  len (mcp_server .tools ) ==  len (expected_operations )
630+     assert  len (mcp_server .operation_map ) ==  len (expected_operations )
631+ 
632+     for  op  in  expected_operations :
633+         assert  op  in  mcp_server .operation_map 
634+ 
635+     for  op  in  deprecated_operations :
636+         assert  op  not  in mcp_server .operation_map 
637+ 
638+     for  tool  in  mcp_server .tools :
639+         assert  tool .name  in  expected_operations 
640+         assert  tool .name  not  in deprecated_operations 
641+ 
642+ 
643+ def  test_ignore_deprecated_false (simple_fastapi_app : FastAPI ):
644+     """Test that deprecated operations are included when ignore_deprecated=False.""" 
645+ 
646+     # Add deprecated operations to the simple app 
647+     @simple_fastapi_app .get ( 
648+         "/deprecated/items/" , 
649+         response_model = list , 
650+         tags = ["deprecated" ], 
651+         operation_id = "list_deprecated_items" , 
652+         deprecated = True , 
653+     ) 
654+     async  def  list_deprecated_items ():
655+         """[DEPRECATED] List all items (deprecated version).""" 
656+         return  []
657+ 
658+     @simple_fastapi_app .get ( 
659+         "/deprecated/items/{item_id}" , 
660+         response_model = dict , 
661+         tags = ["deprecated" ], 
662+         operation_id = "get_deprecated_item" , 
663+         deprecated = True , 
664+     ) 
665+     async  def  get_deprecated_item (item_id : int ):
666+         """[DEPRECATED] Get a specific item by its ID (deprecated version).""" 
667+         return  {"id" : item_id }
668+ 
669+     @simple_fastapi_app .post ( 
670+         "/deprecated/items/" , 
671+         response_model = dict , 
672+         tags = ["deprecated" ], 
673+         operation_id = "create_deprecated_item" , 
674+         deprecated = True , 
675+     ) 
676+     async  def  create_deprecated_item ():
677+         """[DEPRECATED] Create a new item in the database (deprecated version).""" 
678+         return  {"id" : 1 }
679+ 
680+     mcp_server  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = False )
681+ 
682+     # Should include both regular and deprecated operations 
683+     expected_operations  =  ["list_items" , "get_item" , "create_item" , "update_item" , "delete_item" , "raise_error" ]
684+     deprecated_operations  =  ["list_deprecated_items" , "get_deprecated_item" , "create_deprecated_item" ]
685+     all_operations  =  expected_operations  +  deprecated_operations 
686+ 
687+     assert  len (mcp_server .tools ) ==  len (all_operations )
688+     assert  len (mcp_server .operation_map ) ==  len (all_operations )
689+ 
690+     for  op  in  all_operations :
691+         assert  op  in  mcp_server .operation_map 
692+ 
693+     for  tool  in  mcp_server .tools :
694+         assert  tool .name  in  all_operations 
695+ 
696+ 
697+ def  test_ignore_deprecated_true_explicit (simple_fastapi_app : FastAPI ):
698+     """Test that deprecated operations are excluded when ignore_deprecated=True explicitly.""" 
699+ 
700+     # Add deprecated operations to the simple app 
701+     @simple_fastapi_app .get ( 
702+         "/deprecated/items/" , 
703+         response_model = list , 
704+         tags = ["deprecated" ], 
705+         operation_id = "list_deprecated_items" , 
706+         deprecated = True , 
707+     ) 
708+     async  def  list_deprecated_items ():
709+         """[DEPRECATED] List all items (deprecated version).""" 
710+         return  []
711+ 
712+     @simple_fastapi_app .get ( 
713+         "/deprecated/items/{item_id}" , 
714+         response_model = dict , 
715+         tags = ["deprecated" ], 
716+         operation_id = "get_deprecated_item" , 
717+         deprecated = True , 
718+     ) 
719+     async  def  get_deprecated_item (item_id : int ):
720+         """[DEPRECATED] Get a specific item by its ID (deprecated version).""" 
721+         return  {"id" : item_id }
722+ 
723+     @simple_fastapi_app .post ( 
724+         "/deprecated/items/" , 
725+         response_model = dict , 
726+         tags = ["deprecated" ], 
727+         operation_id = "create_deprecated_item" , 
728+         deprecated = True , 
729+     ) 
730+     async  def  create_deprecated_item ():
731+         """[DEPRECATED] Create a new item in the database (deprecated version).""" 
732+         return  {"id" : 1 }
733+ 
734+     mcp_server  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = True )
735+ 
736+     # Should include regular operations but exclude deprecated ones 
737+     expected_operations  =  ["list_items" , "get_item" , "create_item" , "update_item" , "delete_item" , "raise_error" ]
738+     deprecated_operations  =  ["list_deprecated_items" , "get_deprecated_item" , "create_deprecated_item" ]
739+ 
740+     assert  len (mcp_server .tools ) ==  len (expected_operations )
741+     assert  len (mcp_server .operation_map ) ==  len (expected_operations )
742+ 
743+     for  op  in  expected_operations :
744+         assert  op  in  mcp_server .operation_map 
745+ 
746+     for  op  in  deprecated_operations :
747+         assert  op  not  in mcp_server .operation_map 
748+ 
749+     for  tool  in  mcp_server .tools :
750+         assert  tool .name  in  expected_operations 
751+         assert  tool .name  not  in deprecated_operations 
752+ 
753+ 
754+ def  test_ignore_deprecated_with_no_deprecated_operations (simple_fastapi_app : FastAPI ):
755+     """Test that ignore_deprecated works correctly when there are no deprecated operations.""" 
756+     mcp_server_ignore_true  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = True )
757+     mcp_server_ignore_false  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = False )
758+ 
759+     # Both should return the same results when there are no deprecated operations 
760+     assert  len (mcp_server_ignore_true .tools ) ==  len (mcp_server_ignore_false .tools )
761+     assert  len (mcp_server_ignore_true .operation_map ) ==  len (mcp_server_ignore_false .operation_map )
762+ 
763+     expected_operations  =  ["list_items" , "get_item" , "create_item" , "update_item" , "delete_item" , "raise_error" ]
764+ 
765+     for  op  in  expected_operations :
766+         assert  op  in  mcp_server_ignore_true .operation_map 
767+         assert  op  in  mcp_server_ignore_false .operation_map 
768+ 
769+     for  tool  in  mcp_server_ignore_true .tools :
770+         assert  tool .name  in  expected_operations 
771+ 
772+     for  tool  in  mcp_server_ignore_false .tools :
773+         assert  tool .name  in  expected_operations 
774+ 
775+ 
776+ def  test_ignore_deprecated_combined_with_filtering (simple_fastapi_app : FastAPI ):
777+     """Test that ignore_deprecated works correctly when combined with other filtering options.""" 
778+ 
779+     # Add deprecated operations to the simple app 
780+     @simple_fastapi_app .get ( 
781+         "/deprecated/items/" , 
782+         response_model = list , 
783+         tags = ["deprecated" ], 
784+         operation_id = "list_deprecated_items" , 
785+         deprecated = True , 
786+     ) 
787+     async  def  list_deprecated_items ():
788+         """[DEPRECATED] List all items (deprecated version).""" 
789+         return  []
790+ 
791+     @simple_fastapi_app .get ( 
792+         "/deprecated/items/{item_id}" , 
793+         response_model = dict , 
794+         tags = ["deprecated" ], 
795+         operation_id = "get_deprecated_item" , 
796+         deprecated = True , 
797+     ) 
798+     async  def  get_deprecated_item (item_id : int ):
799+         """[DEPRECATED] Get a specific item by its ID (deprecated version).""" 
800+         return  {"id" : item_id }
801+ 
802+     @simple_fastapi_app .post ( 
803+         "/deprecated/items/" , 
804+         response_model = dict , 
805+         tags = ["deprecated" ], 
806+         operation_id = "create_deprecated_item" , 
807+         deprecated = True , 
808+     ) 
809+     async  def  create_deprecated_item ():
810+         """[DEPRECATED] Create a new item in the database (deprecated version).""" 
811+         return  {"id" : 1 }
812+ 
813+     # Test with include_operations 
814+     mcp_server  =  FastApiMCP (
815+         simple_fastapi_app , ignore_deprecated = True , include_operations = ["list_items" , "get_deprecated_item" ]
816+     )
817+ 
818+     # Should only include list_items since get_deprecated_item is deprecated and ignored 
819+     assert  len (mcp_server .tools ) ==  1 
820+     assert  "list_items"  in  mcp_server .operation_map 
821+     assert  "get_deprecated_item"  not  in mcp_server .operation_map 
822+ 
823+     # Test with include_tags 
824+     mcp_server  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = True , include_tags = ["deprecated" ])
825+ 
826+     # Should not include any deprecated operations 
827+     assert  len (mcp_server .tools ) ==  0 
828+ 
829+     # Test with exclude_tags 
830+     mcp_server  =  FastApiMCP (simple_fastapi_app , ignore_deprecated = True , exclude_tags = ["items" ])
831+ 
832+     # Should only include raise_error since items are excluded and deprecated are ignored 
833+     assert  len (mcp_server .tools ) ==  1 
834+     assert  "raise_error"  in  mcp_server .operation_map 
0 commit comments